From 48854f7e293afe236528e4bab7d2bc78f17c4bcc Mon Sep 17 00:00:00 2001 From: "openclaw-docs-i18n[bot]" Date: Wed, 8 Apr 2026 06:07:01 +0000 Subject: [PATCH] chore(i18n): refresh id translations --- docs/id/channels/slack.md | 230 ++-- docs/id/concepts/memory.md | 138 ++- docs/id/concepts/model-providers.md | 514 ++++---- docs/id/concepts/qa-e2e-automation.md | 35 +- docs/id/concepts/streaming.md | 141 +-- docs/id/gateway/configuration-reference.md | 1293 ++++++++++---------- docs/id/gateway/configuration.md | 312 ++--- docs/id/plugins/memory-wiki.md | 370 ++++++ docs/id/providers/glm.md | 22 +- docs/id/providers/zai.md | 42 +- docs/id/refactor/qa.md | 229 ++-- docs/id/tools/slash-commands.md | 314 ++--- docs/id/tools/tts.md | 222 ++-- 13 files changed, 2139 insertions(+), 1723 deletions(-) create mode 100644 docs/id/plugins/memory-wiki.md diff --git a/docs/id/channels/slack.md b/docs/id/channels/slack.md index c9eb82f34..2c5b92038 100644 --- a/docs/id/channels/slack.md +++ b/docs/id/channels/slack.md @@ -1,26 +1,26 @@ --- read_when: - Menyiapkan Slack atau men-debug mode socket/HTTP Slack -summary: Pengaturan Slack dan perilaku runtime (Socket Mode + URL Permintaan HTTP) +summary: Penyiapan Slack dan perilaku runtime (Socket Mode + HTTP Request URLs) title: Slack x-i18n: - generated_at: "2026-04-07T09:13:54Z" + generated_at: "2026-04-08T06:01:53Z" model: gpt-5.4 provider: openai - source_hash: 2b8fd2cc6c638ee82069f0af2c2b6f6f49c87da709b941433a0343724a9907ea + source_hash: cad132131ddce688517def7c14703ad314441c67aacc4cc2a2a721e1d1c01942 source_path: channels/slack.md workflow: 15 --- # Slack -Status: siap produksi untuk DM + channel melalui integrasi aplikasi Slack. Mode default adalah Socket Mode; URL Permintaan HTTP juga didukung. +Status: siap produksi untuk DM + channel melalui integrasi aplikasi Slack. Mode default adalah Socket Mode; HTTP Request URLs juga didukung. - - DM Slack secara default menggunakan mode pemasangan. + + DM Slack secara default menggunakan mode pairing. - + Perilaku perintah native dan katalog perintah. @@ -34,10 +34,10 @@ Status: siap produksi untuk DM + channel melalui integrasi aplikasi Slack. Mode - Di pengaturan aplikasi Slack, tekan tombol **[Create New App](https://api.slack.com/apps/new)**: + Di pengaturan aplikasi Slack tekan tombol **[Create New App](https://api.slack.com/apps/new)**: - pilih **from a manifest** dan pilih workspace untuk aplikasi Anda - - tempel [manifest contoh](#manifest-and-scope-checklist) di bawah ini lalu lanjutkan untuk membuat + - tempel [manifest contoh](#manifest-and-scope-checklist) dari bawah dan lanjutkan untuk membuat - buat **App-Level Token** (`xapp-...`) dengan `connections:write` - instal aplikasi dan salin **Bot Token** (`xoxb-...`) yang ditampilkan @@ -77,10 +77,10 @@ openclaw gateway - + - Di pengaturan aplikasi Slack, tekan tombol **[Create New App](https://api.slack.com/apps/new)**: + Di pengaturan aplikasi Slack tekan tombol **[Create New App](https://api.slack.com/apps/new)**: - pilih **from a manifest** dan pilih workspace untuk aplikasi Anda - tempel [manifest contoh](#manifest-and-scope-checklist) dan perbarui URL sebelum membuat @@ -106,9 +106,9 @@ openclaw gateway ``` - Gunakan path webhook unik untuk HTTP multi-akun + Gunakan jalur webhook unik untuk HTTP multi-akun - Berikan setiap akun `webhookPath` yang berbeda (default `/slack/events`) agar pendaftaran tidak berbenturan. + Berikan setiap akun `webhookPath` yang berbeda (default `/slack/events`) agar pendaftaran tidak bertabrakan. @@ -205,7 +205,7 @@ openclaw gateway - + ```json { @@ -290,13 +290,12 @@ openclaw gateway - - Tambahkan scope bot `chat:write.customize` jika Anda ingin pesan keluar menggunakan identitas agen aktif (nama pengguna dan ikon kustom) alih-alih identitas aplikasi Slack default. + + Tambahkan bot scope `chat:write.customize` jika Anda ingin pesan keluar menggunakan identitas agen aktif (username dan ikon kustom) alih-alih identitas aplikasi Slack default. Jika Anda menggunakan ikon emoji, Slack mengharapkan sintaks `:emoji_name:`. - - + Jika Anda mengonfigurasi `channels.slack.userToken`, scope baca yang umum adalah: - `channels:history`, `groups:history`, `im:history`, `mpim:history` @@ -314,34 +313,34 @@ openclaw gateway - `botToken` + `appToken` wajib untuk Socket Mode. - Mode HTTP memerlukan `botToken` + `signingSecret`. -- `botToken`, `appToken`, `signingSecret`, dan `userToken` menerima string plaintext - atau objek SecretRef. -- Token konfigurasi mengesampingkan fallback env. +- `botToken`, `appToken`, `signingSecret`, dan `userToken` menerima string + plaintext atau objek SecretRef. +- Token config mengesampingkan fallback env. - Fallback env `SLACK_BOT_TOKEN` / `SLACK_APP_TOKEN` hanya berlaku untuk akun default. -- `userToken` (`xoxp-...`) hanya untuk konfigurasi (tanpa fallback env) dan default ke perilaku hanya-baca (`userTokenReadOnly: true`). +- `userToken` (`xoxp-...`) hanya config (tanpa fallback env) dan default ke perilaku hanya-baca (`userTokenReadOnly: true`). Perilaku snapshot status: -- Inspeksi akun Slack melacak field `*Source` dan `*Status` - per kredensial (`botToken`, `appToken`, `signingSecret`, `userToken`). +- Inspeksi akun Slack melacak field `*Source` dan `*Status` per kredensial + (`botToken`, `appToken`, `signingSecret`, `userToken`). - Status adalah `available`, `configured_unavailable`, atau `missing`. - `configured_unavailable` berarti akun dikonfigurasi melalui SecretRef - atau sumber secret non-inline lain, tetapi path perintah/runtime saat ini - tidak dapat menyelesaikan nilai sebenarnya. + atau sumber secret non-inline lainnya, tetapi jalur perintah/runtime saat ini + tidak dapat me-resolve nilai sebenarnya. - Dalam mode HTTP, `signingSecretStatus` disertakan; dalam Socket Mode, pasangan yang diperlukan adalah `botTokenStatus` + `appTokenStatus`. -Untuk tindakan/pembacaan direktori, token pengguna dapat diprioritaskan jika dikonfigurasi. Untuk penulisan, token bot tetap diprioritaskan; penulisan token pengguna hanya diizinkan saat `userTokenReadOnly: false` dan token bot tidak tersedia. +Untuk aksi/pembacaan direktori, user token dapat diprioritaskan bila dikonfigurasi. Untuk penulisan, bot token tetap diprioritaskan; penulisan dengan user-token hanya diizinkan saat `userTokenReadOnly: false` dan bot token tidak tersedia. -## Tindakan dan gate +## Aksi dan gate -Tindakan Slack dikendalikan oleh `channels.slack.actions.*`. +Aksi Slack dikendalikan oleh `channels.slack.actions.*`. -Grup tindakan yang tersedia dalam tooling Slack saat ini: +Grup aksi yang tersedia dalam tooling Slack saat ini: -| Grup | Default | +| Group | Default | | ---------- | ------- | | messages | enabled | | reactions | enabled | @@ -349,7 +348,7 @@ Grup tindakan yang tersedia dalam tooling Slack saat ini: | memberInfo | enabled | | emojiList | enabled | -Tindakan pesan Slack saat ini mencakup `send`, `upload-file`, `download-file`, `read`, `edit`, `delete`, `pin`, `unpin`, `list-pins`, `member-info`, dan `emoji-list`. +Aksi pesan Slack saat ini mencakup `send`, `upload-file`, `download-file`, `read`, `edit`, `delete`, `pin`, `unpin`, `list-pins`, `member-info`, dan `emoji-list`. ## Kontrol akses dan routing @@ -367,16 +366,16 @@ Tindakan pesan Slack saat ini mencakup `send`, `upload-file`, `download-file`, ` - `dm.enabled` (default true) - `channels.slack.allowFrom` (disarankan) - `dm.allowFrom` (legacy) - - `dm.groupEnabled` (DM grup default false) + - `dm.groupEnabled` (default DM grup false) - `dm.groupChannels` (allowlist MPIM opsional) Prioritas multi-akun: - `channels.slack.accounts.default.allowFrom` hanya berlaku untuk akun `default`. - - Akun bernama mewarisi `channels.slack.allowFrom` saat `allowFrom` miliknya sendiri tidak disetel. + - Akun bernama mewarisi `channels.slack.allowFrom` ketika `allowFrom` milik mereka sendiri tidak disetel. - Akun bernama tidak mewarisi `channels.slack.accounts.default.allowFrom`. - Pemasangan di DM menggunakan `openclaw pairing approve slack `. + Pairing di DM menggunakan `openclaw pairing approve slack `. @@ -389,24 +388,24 @@ Tindakan pesan Slack saat ini mencakup `send`, `upload-file`, `download-file`, ` Allowlist channel berada di bawah `channels.slack.channels` dan sebaiknya menggunakan ID channel yang stabil. - Catatan runtime: jika `channels.slack` benar-benar tidak ada (penyiapan hanya env), runtime akan fallback ke `groupPolicy="allowlist"` dan mencatat peringatan (bahkan jika `channels.defaults.groupPolicy` disetel). + Catatan runtime: jika `channels.slack` benar-benar tidak ada (penyiapan hanya-env), runtime akan fallback ke `groupPolicy="allowlist"` dan mencatat peringatan (bahkan jika `channels.defaults.groupPolicy` disetel). Resolusi nama/ID: - - entri allowlist channel dan entri allowlist DM diselesaikan saat startup ketika akses token memungkinkan - - entri nama channel yang tidak terselesaikan tetap dipertahankan seperti dikonfigurasi tetapi diabaikan untuk routing secara default - - otorisasi inbound dan routing channel secara default berbasis ID; pencocokan langsung nama pengguna/slug memerlukan `channels.slack.dangerouslyAllowNameMatching: true` + - entri allowlist channel dan entri allowlist DM di-resolve saat startup ketika akses token mengizinkan + - entri nama channel yang tidak terselesaikan tetap dipertahankan seperti dikonfigurasi tetapi secara default diabaikan untuk routing + - otorisasi inbound dan routing channel secara default mengutamakan ID; pencocokan langsung username/slug memerlukan `channels.slack.dangerouslyAllowNameMatching: true` - Pesan channel secara default digate oleh mention. + Pesan channel secara default dibatasi oleh mention. Sumber mention: - mention aplikasi eksplisit (`<@botId>`) - pola regex mention (`agents.list[].groupChat.mentionPatterns`, fallback `messages.groupChat.mentionPatterns`) - - perilaku thread balas-ke-bot implisit (dinonaktifkan saat `thread.requireExplicitMention` bernilai `true`) + - perilaku thread balasan-ke-bot implisit (dinonaktifkan saat `thread.requireExplicitMention` bernilai `true`) Kontrol per channel (`channels.slack.channels.`; nama hanya melalui resolusi startup atau `dangerouslyAllowNameMatching`): @@ -416,8 +415,8 @@ Tindakan pesan Slack saat ini mencakup `send`, `upload-file`, `download-file`, ` - `skills` - `systemPrompt` - `tools`, `toolsBySender` - - format key `toolsBySender`: `id:`, `e164:`, `username:`, `name:`, atau wildcard `"*"` - (key legacy tanpa prefiks tetap dipetakan hanya ke `id:`) + - format kunci `toolsBySender`: `id:`, `e164:`, `username:`, `name:`, atau wildcard `"*"` + (kunci legacy tanpa prefiks masih dipetakan hanya ke `id:`) @@ -425,36 +424,36 @@ Tindakan pesan Slack saat ini mencakup `send`, `upload-file`, `download-file`, ` ## Threading, sesi, dan tag balasan - DM dirutekan sebagai `direct`; channel sebagai `channel`; MPIM sebagai `group`. -- Dengan `session.dmScope=main` default, DM Slack digabungkan ke sesi utama agen. +- Dengan default `session.dmScope=main`, DM Slack digabungkan ke sesi utama agen. - Sesi channel: `agent::slack:channel:`. -- Balasan thread dapat membuat sufiks sesi thread (`:thread:`) jika berlaku. +- Balasan thread dapat membuat sufiks sesi thread (`:thread:`) bila berlaku. - Default `channels.slack.thread.historyScope` adalah `thread`; default `thread.inheritParent` adalah `false`. - `channels.slack.thread.initialHistoryLimit` mengontrol berapa banyak pesan thread yang sudah ada diambil saat sesi thread baru dimulai (default `20`; setel `0` untuk menonaktifkan). -- `channels.slack.thread.requireExplicitMention` (default `false`): saat `true`, menekan mention thread implisit sehingga bot hanya merespons mention `@bot` eksplisit di dalam thread, bahkan saat bot sudah berpartisipasi di thread tersebut. Tanpa ini, balasan dalam thread yang diikuti bot melewati gate `requireMention`. +- `channels.slack.thread.requireExplicitMention` (default `false`): saat `true`, menekan mention thread implisit sehingga bot hanya merespons mention `@bot` yang eksplisit di dalam thread, bahkan ketika bot sudah berpartisipasi dalam thread. Tanpa ini, balasan dalam thread yang diikuti bot akan melewati gate `requireMention`. Kontrol threading balasan: - `channels.slack.replyToMode`: `off|first|all|batched` (default `off`) - `channels.slack.replyToModeByChatType`: per `direct|group|channel` -- fallback legacy untuk chat direct: `channels.slack.dm.replyToMode` +- fallback legacy untuk chat langsung: `channels.slack.dm.replyToMode` Tag balasan manual didukung: - `[[reply_to_current]]` - `[[reply_to:]]` -Catatan: `replyToMode="off"` menonaktifkan **semua** threading balasan di Slack, termasuk tag `[[reply_to_*]]` eksplisit. Ini berbeda dari Telegram, di mana tag eksplisit tetap dihormati dalam mode `"off"`. Perbedaan ini mencerminkan model threading platform: thread Slack menyembunyikan pesan dari channel, sedangkan balasan Telegram tetap terlihat di alur chat utama. +Catatan: `replyToMode="off"` menonaktifkan **semua** threading balasan di Slack, termasuk tag `[[reply_to_*]]` yang eksplisit. Ini berbeda dari Telegram, di mana tag eksplisit tetap dihormati dalam mode `"off"`. Perbedaan ini mencerminkan model threading platform: thread Slack menyembunyikan pesan dari channel, sementara balasan Telegram tetap terlihat dalam alur chat utama. ## Reaksi ack -`ackReaction` mengirim emoji acknowledgement saat OpenClaw memproses pesan inbound. +`ackReaction` mengirim emoji pengakuan saat OpenClaw sedang memproses pesan inbound. Urutan resolusi: - `channels.slack.accounts..ackReaction` - `channels.slack.ackReaction` - `messages.ackReaction` -- fallback emoji identitas agen (`agents.list[].identity.emoji`, jika tidak ada `"👀"`) +- fallback emoji identitas agen (`agents.list[].identity.emoji`, jika tidak ada "👀") Catatan: @@ -467,14 +466,16 @@ Catatan: - `off`: nonaktifkan streaming pratinjau langsung. - `partial` (default): ganti teks pratinjau dengan output parsial terbaru. -- `block`: tambahkan pembaruan pratinjau yang dipotong-potong. +- `block`: tambahkan pembaruan pratinjau bertahap. - `progress`: tampilkan teks status progres saat menghasilkan, lalu kirim teks final. -`channels.slack.nativeStreaming` mengontrol streaming teks native Slack saat `streaming` bernilai `partial` (default: `true`). +`channels.slack.streaming.nativeTransport` mengontrol streaming teks native Slack saat `channels.slack.streaming.mode` adalah `partial` (default: `true`). -- Thread balasan harus tersedia agar streaming teks native muncul. Pemilihan thread tetap mengikuti `replyToMode`. Tanpanya, pratinjau draf normal digunakan. -- Payload media dan non-teks fallback ke pengiriman normal. -- Jika streaming gagal di tengah balasan, OpenClaw fallback ke pengiriman normal untuk payload yang tersisa. +- Thread balasan harus tersedia agar streaming teks native dan status thread assistant Slack dapat muncul. Pemilihan thread tetap mengikuti `replyToMode`. +- Root channel dan chat grup tetap dapat menggunakan pratinjau draf normal saat streaming native tidak tersedia. +- DM Slack tingkat atas secara default tetap di luar thread, sehingga tidak menampilkan pratinjau bergaya thread; gunakan balasan thread atau `typingReaction` jika Anda ingin progres terlihat di sana. +- Payload media dan non-teks akan fallback ke pengiriman normal. +- Jika streaming gagal di tengah balasan, OpenClaw akan fallback ke pengiriman normal untuk payload yang tersisa. Gunakan pratinjau draf alih-alih streaming teks native Slack: @@ -482,17 +483,20 @@ Gunakan pratinjau draf alih-alih streaming teks native Slack: { channels: { slack: { - streaming: "partial", - nativeStreaming: false, + streaming: { + mode: "partial", + nativeTransport: false, + }, }, }, } ``` -Key legacy: +Kunci legacy: -- `channels.slack.streamMode` (`replace | status_final | append`) dimigrasikan otomatis ke `channels.slack.streaming`. -- boolean `channels.slack.streaming` dimigrasikan otomatis ke `channels.slack.nativeStreaming`. +- `channels.slack.streamMode` (`replace | status_final | append`) dimigrasikan otomatis ke `channels.slack.streaming.mode`. +- boolean `channels.slack.streaming` dimigrasikan otomatis ke `channels.slack.streaming.mode` dan `channels.slack.streaming.nativeTransport`. +- `channels.slack.nativeStreaming` legacy dimigrasikan otomatis ke `channels.slack.streaming.nativeTransport`. ## Fallback reaksi mengetik @@ -512,7 +516,7 @@ Catatan: - Lampiran file Slack diunduh dari URL privat yang dihosting Slack (alur permintaan dengan autentikasi token) dan ditulis ke media store saat pengambilan berhasil dan batas ukuran mengizinkan. + Lampiran file Slack diunduh dari URL privat yang di-host Slack (alur permintaan terautentikasi token) dan ditulis ke media store ketika pengambilan berhasil dan batas ukuran mengizinkan. Batas ukuran inbound runtime secara default adalah `20MB` kecuali diganti oleh `channels.slack.mediaMaxMb`. @@ -520,7 +524,7 @@ Catatan: - chunk teks menggunakan `channels.slack.textChunkLimit` (default 4000) - - `channels.slack.chunkMode="newline"` mengaktifkan pemisahan dengan paragraf terlebih dahulu + - `channels.slack.chunkMode="newline"` mengaktifkan pemisahan yang mengutamakan paragraf - pengiriman file menggunakan API upload Slack dan dapat menyertakan balasan thread (`thread_ts`) - batas media outbound mengikuti `channels.slack.mediaMaxMb` saat dikonfigurasi; jika tidak, pengiriman channel menggunakan default jenis MIME dari pipeline media @@ -540,24 +544,24 @@ Catatan: - Mode otomatis perintah native adalah **off** untuk Slack (`commands.native: "auto"` tidak mengaktifkan perintah native Slack). - Aktifkan handler perintah Slack native dengan `channels.slack.commands.native: true` (atau global `commands.native: true`). -- Saat perintah native diaktifkan, daftarkan perintah slash yang cocok di Slack (nama `/`), dengan satu pengecualian: +- Saat perintah native diaktifkan, daftarkan slash command yang cocok di Slack (nama `/`), dengan satu pengecualian: - daftarkan `/agentstatus` untuk perintah status (Slack mencadangkan `/status`) -- Jika perintah native tidak diaktifkan, Anda dapat menjalankan satu perintah slash yang dikonfigurasi melalui `channels.slack.slashCommand`. -- Menu argumen native kini menyesuaikan strategi render-nya: +- Jika perintah native tidak diaktifkan, Anda dapat menjalankan satu slash command yang dikonfigurasi melalui `channels.slack.slashCommand`. +- Menu argumen native sekarang menyesuaikan strategi render-nya: - hingga 5 opsi: blok tombol - - 6-100 opsi: menu pilihan statis - - lebih dari 100 opsi: pilihan eksternal dengan pemfilteran opsi async saat handler opsi interaktivitas tersedia - - jika nilai opsi yang dienkode melebihi batas Slack, alur fallback ke tombol -- Untuk payload opsi yang panjang, menu argumen perintah slash menggunakan dialog konfirmasi sebelum mengirim nilai yang dipilih. + - 6-100 opsi: menu pilih statis + - lebih dari 100 opsi: external select dengan penyaringan opsi async saat handler opsi interactivity tersedia + - jika nilai opsi yang dienkode melebihi batas Slack, alur akan fallback ke tombol +- Untuk payload opsi yang panjang, menu argumen Slash command menggunakan dialog konfirmasi sebelum mengirim nilai yang dipilih. -Pengaturan default perintah slash: +Pengaturan default slash command: - `enabled: false` - `name: "openclaw"` - `sessionPrefix: "slack:slash"` - `ephemeral: true` -Sesi slash menggunakan key terisolasi: +Sesi slash menggunakan kunci terisolasi: - `agent::slack:slash:` @@ -599,44 +603,44 @@ Atau aktifkan hanya untuk satu akun Slack: } ``` -Saat diaktifkan, agen dapat mengeluarkan directive balasan khusus Slack: +Saat diaktifkan, agen dapat mengeluarkan direktif balasan khusus Slack: - `[[slack_buttons: Approve:approve, Reject:reject]]` - `[[slack_select: Choose a target | Canary:canary, Production:production]]` -Directive ini dikompilasi menjadi Slack Block Kit dan merutekan klik atau pilihan kembali melalui path event interaksi Slack yang ada. +Direktif ini dikompilasi menjadi Slack Block Kit dan merutekan klik atau pilihan kembali melalui jalur event interaksi Slack yang sudah ada. Catatan: -- Ini adalah UI khusus Slack. Channel lain tidak menerjemahkan directive Slack Block Kit ke sistem tombol mereka sendiri. -- Nilai callback interaktif adalah token buram yang dibuat OpenClaw, bukan nilai mentah yang ditulis agen. -- Jika blok interaktif yang dihasilkan melebihi batas Slack Block Kit, OpenClaw fallback ke balasan teks asli alih-alih mengirim payload blok yang tidak valid. +- Ini adalah UI khusus Slack. Channel lain tidak menerjemahkan direktif Slack Block Kit ke sistem tombol mereka sendiri. +- Nilai callback interaktif adalah token opak yang dibuat OpenClaw, bukan nilai mentah yang ditulis agen. +- Jika blok interaktif yang dihasilkan melebihi batas Slack Block Kit, OpenClaw akan fallback ke balasan teks asli alih-alih mengirim payload blocks yang tidak valid. ## Persetujuan exec di Slack -Slack dapat bertindak sebagai klien persetujuan native dengan tombol interaktif dan interaksi, alih-alih fallback ke UI Web atau terminal. +Slack dapat bertindak sebagai klien persetujuan native dengan tombol interaktif dan interaksi, alih-alih fallback ke Web UI atau terminal. - Persetujuan exec menggunakan `channels.slack.execApprovals.*` untuk routing DM/channel native. -- Persetujuan plugin masih dapat diselesaikan melalui permukaan tombol native Slack yang sama saat permintaan sudah masuk ke Slack dan jenis id persetujuannya adalah `plugin:`. +- Persetujuan plugin tetap dapat diselesaikan melalui permukaan tombol native Slack yang sama ketika permintaan sudah masuk di Slack dan jenis id persetujuannya adalah `plugin:`. - Otorisasi approver tetap ditegakkan: hanya pengguna yang diidentifikasi sebagai approver 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, itulah UX persetujuan utama; OpenClaw -hanya boleh menyertakan perintah `/approve` manual saat hasil tool menyatakan persetujuan chat -tidak tersedia atau persetujuan manual adalah satu-satunya jalur. +Ketika tombol tersebut ada, tombol itu menjadi UX persetujuan utama; OpenClaw +hanya boleh menyertakan perintah `/approve` manual ketika hasil tool menyatakan +persetujuan chat tidak tersedia atau persetujuan manual adalah satu-satunya jalur. -Path konfigurasi: +Jalur config: - `channels.slack.execApprovals.enabled` -- `channels.slack.execApprovals.approvers` (opsional; fallback ke `commands.ownerAllowFrom` jika memungkinkan) +- `channels.slack.execApprovals.approvers` (opsional; fallback ke `commands.ownerAllowFrom` bila memungkinkan) - `channels.slack.execApprovals.target` (`dm` | `channel` | `both`, default: `dm`) - `agentFilter`, `sessionFilter` -Slack secara otomatis mengaktifkan persetujuan exec native saat `enabled` tidak disetel atau `"auto"` dan setidaknya satu -approver berhasil diselesaikan. Setel `enabled: false` untuk menonaktifkan Slack sebagai klien persetujuan native secara eksplisit. -Setel `enabled: true` untuk memaksa persetujuan native aktif saat approver berhasil diselesaikan. +Slack otomatis mengaktifkan persetujuan exec native saat `enabled` tidak disetel atau `"auto"` dan setidaknya +satu approver berhasil di-resolve. Setel `enabled: false` untuk menonaktifkan Slack secara eksplisit sebagai klien persetujuan native. +Setel `enabled: true` untuk memaksa persetujuan native aktif saat approver berhasil di-resolve. -Perilaku default tanpa konfigurasi persetujuan exec Slack eksplisit: +Perilaku default tanpa config persetujuan exec Slack yang eksplisit: ```json5 { @@ -646,8 +650,8 @@ Perilaku default tanpa konfigurasi persetujuan exec Slack eksplisit: } ``` -Konfigurasi native Slack eksplisit hanya diperlukan saat Anda ingin mengganti approver, menambahkan filter, atau -memilih pengiriman origin-chat: +Config native Slack yang eksplisit hanya diperlukan ketika Anda ingin mengesampingkan approver, menambahkan filter, atau +ikut serta dalam pengiriman origin-chat: ```json5 { @@ -663,26 +667,26 @@ memilih pengiriman origin-chat: } ``` -Penerusan bersama `approvals.exec` terpisah. Gunakan hanya saat prompt persetujuan exec juga harus -dirutekan ke chat lain atau target out-of-band eksplisit. Penerusan bersama `approvals.plugin` juga -terpisah; tombol native Slack masih dapat menyelesaikan persetujuan plugin saat permintaan tersebut sudah masuk -ke Slack. +Penerusan bersama `approvals.exec` bersifat terpisah. Gunakan hanya ketika prompt persetujuan exec juga harus +dirutekan ke chat lain atau target out-of-band yang eksplisit. Penerusan bersama `approvals.plugin` juga +terpisah; tombol native Slack tetap dapat menyelesaikan persetujuan plugin saat permintaan tersebut sudah masuk +di Slack. -`/approve` pada chat yang sama juga berfungsi di channel dan DM Slack yang sudah mendukung perintah. Lihat [Persetujuan exec](/id/tools/exec-approvals) untuk model penerusan persetujuan lengkap. +`/approve` di chat yang sama juga berfungsi di channel dan DM Slack yang sudah mendukung perintah. Lihat [Exec approvals](/id/tools/exec-approvals) untuk model lengkap penerusan persetujuan. ## Event dan perilaku operasional - Edit/hapus pesan/siaran thread dipetakan ke event sistem. - Event tambah/hapus reaksi dipetakan ke event sistem. -- Event anggota masuk/keluar, channel dibuat/diubah nama, dan tambah/hapus pin dipetakan ke event sistem. -- `channel_id_changed` dapat memigrasikan key konfigurasi channel saat `configWrites` diaktifkan. +- Event anggota bergabung/keluar, channel dibuat/diubah namanya, dan tambah/hapus pin dipetakan ke event sistem. +- `channel_id_changed` dapat memigrasikan kunci config channel saat `configWrites` diaktifkan. - Metadata topik/tujuan channel diperlakukan sebagai konteks tidak tepercaya dan dapat disuntikkan ke konteks routing. -- Pemula thread dan penanaman konteks riwayat thread awal difilter oleh allowlist pengirim yang dikonfigurasi bila berlaku. -- Aksi blok dan interaksi modal menghasilkan event sistem terstruktur `Slack interaction: ...` dengan field payload kaya: +- Pemula thread dan penyemaian konteks riwayat thread awal difilter oleh allowlist pengirim yang dikonfigurasi bila berlaku. +- Aksi blok dan interaksi modal mengeluarkan event sistem terstruktur `Slack interaction: ...` dengan field payload yang kaya: - aksi blok: nilai terpilih, label, nilai picker, dan metadata `workflow_*` - - event modal `view_submission` dan `view_closed` dengan metadata channel terarah dan input formulir + - event modal `view_submission` dan `view_closed` dengan metadata channel yang dirutekan dan input formulir -## Pointer referensi konfigurasi +## Penunjuk referensi konfigurasi Referensi utama: @@ -694,7 +698,7 @@ Referensi utama: - toggle kompatibilitas: `dangerouslyAllowNameMatching` (break-glass; biarkan nonaktif kecuali diperlukan) - akses channel: `groupPolicy`, `channels.*`, `channels.*.users`, `channels.*.requireMention` - threading/riwayat: `replyToMode`, `replyToModeByChatType`, `thread.*`, `historyLimit`, `dmHistoryLimit`, `dms.*.historyLimit` - - pengiriman: `textChunkLimit`, `chunkMode`, `mediaMaxMb`, `streaming`, `nativeStreaming` + - pengiriman: `textChunkLimit`, `chunkMode`, `mediaMaxMb`, `streaming`, `streaming.nativeTransport` - operasi/fitur: `configWrites`, `commands.native`, `slashCommand.*`, `actions.*`, `userToken`, `userTokenReadOnly` ## Pemecahan masalah @@ -723,7 +727,7 @@ openclaw doctor - `channels.slack.dm.enabled` - `channels.slack.dmPolicy` (atau legacy `channels.slack.dm.policy`) - - persetujuan pairing / entri allowlist + - pairing approval / entri allowlist ```bash openclaw pairing list slack @@ -731,35 +735,35 @@ openclaw pairing list slack - + Validasi token bot + aplikasi dan aktivasi 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 + `appTokenStatus: "configured_unavailable"`, akun Slack tersebut + sudah dikonfigurasi tetapi runtime saat ini tidak dapat me-resolve nilai yang didukung SecretRef. - + Validasi: - signing secret - - path webhook - - URL Permintaan Slack (Events + Interactivity + Slash Commands) + - jalur webhook + - Slack Request URLs (Events + Interactivity + Slash Commands) - `webhookPath` unik per akun HTTP Jika `signingSecretStatus: "configured_unavailable"` muncul di snapshot akun, akun HTTP telah dikonfigurasi tetapi runtime saat ini tidak dapat - menyelesaikan signing secret yang didukung SecretRef. + me-resolve signing secret yang didukung SecretRef. Verifikasi apakah yang Anda maksud adalah: - - mode perintah native (`channels.slack.commands.native: true`) dengan perintah slash yang cocok didaftarkan di Slack - - atau mode perintah slash tunggal (`channels.slack.slashCommand.enabled: true`) + - mode perintah native (`channels.slack.commands.native: true`) dengan slash command yang cocok didaftarkan di Slack + - atau mode satu slash command (`channels.slack.slashCommand.enabled: true`) Periksa juga `commands.useAccessGroups` dan allowlist channel/pengguna. @@ -768,10 +772,10 @@ openclaw pairing list slack ## Terkait -- [Pemasangan](/id/channels/pairing) +- [Pairing](/id/channels/pairing) - [Grup](/id/channels/groups) - [Keamanan](/id/gateway/security) - [Routing channel](/id/channels/channel-routing) - [Pemecahan masalah](/id/channels/troubleshooting) - [Konfigurasi](/id/gateway/configuration) -- [Perintah slash](/id/tools/slash-commands) +- [Slash commands](/id/tools/slash-commands) diff --git a/docs/id/concepts/memory.md b/docs/id/concepts/memory.md index 9c14cef3a..2faf39f79 100644 --- a/docs/id/concepts/memory.md +++ b/docs/id/concepts/memory.md @@ -1,19 +1,19 @@ --- read_when: - - Anda ingin memahami cara kerja memory - - Anda ingin mengetahui file memory apa yang harus ditulis -summary: Cara OpenClaw mengingat berbagai hal di seluruh sesi -title: Ikhtisar Memory + - Anda ingin memahami cara kerja memori + - Anda ingin mengetahui file memori apa yang harus ditulis +summary: Bagaimana OpenClaw mengingat berbagai hal di seluruh sesi +title: Ikhtisar Memori x-i18n: - generated_at: "2026-04-06T03:06:30Z" + generated_at: "2026-04-08T06:00:59Z" model: gpt-5.4 provider: openai - source_hash: d19d4fa9c4b3232b7a97f7a382311d2a375b562040de15e9fe4a0b1990b825e7 + source_hash: 3bb8552341b0b651609edaaae826a22fdc535d240aed4fad4af4b069454004af source_path: concepts/memory.md workflow: 15 --- -# Ikhtisar Memory +# Ikhtisar Memori OpenClaw mengingat berbagai hal dengan menulis **file Markdown biasa** di workspace agen Anda. Model hanya "mengingat" apa yang disimpan ke disk -- tidak ada @@ -21,53 +21,73 @@ status tersembunyi. ## Cara kerjanya -Agen Anda memiliki tiga file yang terkait dengan memory: +Agen Anda memiliki tiga file yang terkait dengan memori: -- **`MEMORY.md`** -- memory jangka panjang. Fakta, preferensi, dan +- **`MEMORY.md`** -- memori jangka panjang. Fakta, preferensi, dan keputusan yang tahan lama. Dimuat pada awal setiap sesi DM. - **`memory/YYYY-MM-DD.md`** -- catatan harian. Konteks berjalan dan pengamatan. Catatan hari ini dan kemarin dimuat secara otomatis. -- **`DREAMS.md`** (eksperimental, opsional) -- Dream Diary dan ringkasan sapuan - dreaming untuk tinjauan manusia. +- **`DREAMS.md`** (eksperimental, opsional) -- Buku Harian Mimpi dan ringkasan + penyapuan dreaming untuk ditinjau manusia. File-file ini berada di workspace agen (default `~/.openclaw/workspace`). Jika Anda ingin agen Anda mengingat sesuatu, cukup minta: "Ingat bahwa saya -lebih suka TypeScript." Agen akan menuliskannya ke file yang sesuai. +lebih memilih TypeScript." Agen akan menuliskannya ke file yang sesuai. -## Alat memory +## Alat memori -Agen memiliki dua alat untuk bekerja dengan memory: +Agen memiliki dua alat untuk bekerja dengan memori: -- **`memory_search`** -- menemukan catatan yang relevan menggunakan pencarian semantik, bahkan ketika - susunan katanya berbeda dari aslinya. -- **`memory_get`** -- membaca file memory tertentu atau rentang baris. +- **`memory_search`** -- menemukan catatan yang relevan menggunakan pencarian semantik, bahkan saat + kata-katanya berbeda dari aslinya. +- **`memory_get`** -- membaca file memori tertentu atau rentang baris. -Kedua alat disediakan oleh plugin memory yang aktif (default: `memory-core`). +Kedua alat ini disediakan oleh plugin memori yang aktif (default: `memory-core`). -## Pencarian memory +## Plugin pendamping Memory Wiki -Saat provider embedding dikonfigurasi, `memory_search` menggunakan **pencarian +Jika Anda ingin memori tahan lama berperilaku lebih seperti basis pengetahuan yang dipelihara daripada +sekadar catatan mentah, gunakan plugin bawaan `memory-wiki`. + +`memory-wiki` menyusun pengetahuan tahan lama ke dalam vault wiki dengan: + +- struktur halaman yang deterministik +- klaim dan bukti yang terstruktur +- pelacakan kontradiksi dan kebaruan +- dasbor yang dihasilkan +- ringkasan terkompilasi untuk konsumen agen/runtime +- alat native wiki seperti `wiki_search`, `wiki_get`, `wiki_apply`, dan `wiki_lint` + +Ini tidak menggantikan plugin memori aktif. Plugin memori aktif tetap +memiliki recall, promosi, dan dreaming. `memory-wiki` menambahkan +lapisan pengetahuan kaya provenance di sampingnya. + +Lihat [Memory Wiki](/id/plugins/memory-wiki). + +## Pencarian memori + +Saat penyedia embedding dikonfigurasi, `memory_search` menggunakan **pencarian hibrida** -- menggabungkan kemiripan vektor (makna semantik) dengan pencocokan kata kunci (istilah persis seperti ID dan simbol kode). Ini langsung berfungsi setelah Anda memiliki -API key untuk provider yang didukung. +kunci API untuk penyedia yang didukung. -OpenClaw mendeteksi otomatis provider embedding Anda dari API key yang tersedia. Jika Anda -mengonfigurasi key OpenAI, Gemini, Voyage, atau Mistral, pencarian memory akan +OpenClaw mendeteksi otomatis penyedia embedding Anda dari kunci API yang tersedia. Jika Anda +telah mengonfigurasi kunci OpenAI, Gemini, Voyage, atau Mistral, pencarian memori diaktifkan secara otomatis. -Untuk detail tentang cara kerja pencarian, opsi penyetelan, dan penyiapan provider, lihat -[Memory Search](/id/concepts/memory-search). +Untuk detail tentang cara kerja pencarian, opsi penyesuaian, dan penyiapan penyedia, lihat +[Pencarian Memori](/id/concepts/memory-search). -## Backend memory +## Backend memori -Berbasis SQLite. Langsung berfungsi dengan pencarian kata kunci, kemiripan vektor, dan +Berbasis SQLite. Berfungsi langsung dengan pencarian kata kunci, kemiripan vektor, dan pencarian hibrida. Tanpa dependensi tambahan. @@ -75,58 +95,68 @@ Sidecar local-first dengan reranking, perluasan kueri, dan kemampuan untuk mengi direktori di luar workspace. -Memory lintas sesi yang AI-native dengan pemodelan pengguna, pencarian semantik, dan -kesadaran multi-agen. Instal plugin. +Memori lintas sesi native AI dengan pemodelan pengguna, pencarian semantik, dan +kesadaran multi-agen. Instalasi plugin. -## Flush memory otomatis +## Lapisan wiki pengetahuan + + + +Menyusun memori tahan lama menjadi vault wiki kaya provenance dengan klaim, +dasbor, mode bridge, dan alur kerja yang ramah Obsidian. + + + +## Flush memori otomatis Sebelum [compaction](/id/concepts/compaction) merangkum percakapan Anda, OpenClaw menjalankan giliran senyap yang mengingatkan agen untuk menyimpan konteks penting ke file -memory. Ini aktif secara default -- Anda tidak perlu mengonfigurasi apa pun. +memori. Ini aktif secara default -- Anda tidak perlu mengonfigurasi apa pun. -Flush memory mencegah hilangnya konteks selama compaction. Jika agen Anda memiliki +Flush memori mencegah hilangnya konteks selama compaction. Jika agen Anda memiliki fakta penting dalam percakapan yang belum ditulis ke file, fakta tersebut -akan disimpan secara otomatis sebelum peringkasan terjadi. +akan disimpan secara otomatis sebelum ringkasan dibuat. ## Dreaming (eksperimental) -Dreaming adalah proses konsolidasi latar belakang opsional untuk memory. Ini mengumpulkan -sinyal jangka pendek, menilai kandidat, dan hanya mempromosikan item yang memenuhi syarat ke -memory jangka panjang (`MEMORY.md`). +Dreaming adalah proses konsolidasi latar belakang opsional untuk memori. Ini mengumpulkan +sinyal jangka pendek, memberi skor pada kandidat, dan hanya mempromosikan item yang memenuhi syarat ke +memori jangka panjang (`MEMORY.md`). -Ini dirancang untuk menjaga memory jangka panjang tetap memiliki sinyal tinggi: +Ini dirancang untuk menjaga memori jangka panjang tetap bernilai tinggi: - **Opt-in**: dinonaktifkan secara default. -- **Terjadwal**: saat diaktifkan, `memory-core` mengelola otomatis satu cron job berulang - untuk satu sapuan dreaming penuh. -- **Berambang batas**: promosi harus lolos ambang skor, frekuensi recall, dan +- **Terjadwal**: saat diaktifkan, `memory-core` mengelola otomatis satu pekerjaan cron berulang + untuk penyapuan dreaming penuh. +- **Berambang batas**: promosi harus lolos gerbang skor, frekuensi recall, dan keragaman kueri. -- **Dapat ditinjau**: ringkasan fase dan entri diary ditulis ke `DREAMS.md` - untuk tinjauan manusia. +- **Dapat ditinjau**: ringkasan fase dan entri buku harian ditulis ke `DREAMS.md` + untuk ditinjau manusia. -Untuk perilaku fase, sinyal penilaian, dan detail Dream Diary, lihat -[Dreaming (eksperimental)](/concepts/dreaming). +Untuk perilaku fase, sinyal penilaian, dan detail Buku Harian Mimpi, lihat +[Dreaming (eksperimental)](/id/concepts/dreaming). ## CLI ```bash -openclaw memory status # Periksa status indeks dan provider -openclaw memory search "query" # Cari dari command line +openclaw memory status # Periksa status indeks dan penyedia +openclaw memory search "query" # Cari dari baris perintah openclaw memory index --force # Bangun ulang indeks ``` ## Bacaan lebih lanjut - [Builtin Memory Engine](/id/concepts/memory-builtin) -- backend SQLite default -- [QMD Memory Engine](/id/concepts/memory-qmd) -- sidecar local-first tingkat lanjut -- [Honcho Memory](/id/concepts/memory-honcho) -- memory lintas sesi AI-native -- [Memory Search](/id/concepts/memory-search) -- pipeline pencarian, provider, dan - penyetelan -- [Dreaming (eksperimental)](/concepts/dreaming) -- promosi latar belakang - dari recall jangka pendek ke memory jangka panjang -- [Referensi konfigurasi Memory](/id/reference/memory-config) -- semua opsi konfigurasi -- [Compaction](/id/concepts/compaction) -- cara compaction berinteraksi dengan memory +- [QMD Memory Engine](/id/concepts/memory-qmd) -- sidecar local-first lanjutan +- [Honcho Memory](/id/concepts/memory-honcho) -- memori lintas sesi native AI +- [Memory Wiki](/id/plugins/memory-wiki) -- vault pengetahuan terkompilasi dan alat native wiki +- [Memory Search](/id/concepts/memory-search) -- pipeline pencarian, penyedia, dan + penyesuaian +- [Dreaming (eksperimental)](/id/concepts/dreaming) -- promosi latar belakang + dari recall jangka pendek ke memori jangka panjang +- [Referensi konfigurasi memori](/id/reference/memory-config) -- semua opsi konfigurasi +- [Compaction](/id/concepts/compaction) -- bagaimana compaction berinteraksi dengan memori diff --git a/docs/id/concepts/model-providers.md b/docs/id/concepts/model-providers.md index 55056a646..dbc34eada 100644 --- a/docs/id/concepts/model-providers.md +++ b/docs/id/concepts/model-providers.md @@ -1,40 +1,40 @@ --- read_when: - Anda memerlukan referensi penyiapan model per penyedia - - Anda ingin contoh konfigurasi atau perintah onboarding CLI untuk penyedia model + - Anda menginginkan contoh konfigurasi atau perintah onboarding CLI untuk penyedia model summary: Ikhtisar penyedia model dengan contoh konfigurasi + alur CLI title: Penyedia Model x-i18n: - generated_at: "2026-04-08T02:15:44Z" + generated_at: "2026-04-08T06:02:39Z" model: gpt-5.4 provider: openai - source_hash: 26b36a2bc19a28a7ef39aa8e81a0050fea1d452ac4969122e5cdf8755e690258 + source_hash: 558ac9e34b67fcc3dd6791a01bebc17e1c34152fa6c5611593d681e8cfa532d9 source_path: concepts/model-providers.md workflow: 15 --- # Penyedia model -Halaman ini membahas **penyedia LLM/model** (bukan saluran chat seperti WhatsApp/Telegram). +Halaman ini membahas **LLM/penyedia model** (bukan saluran chat seperti WhatsApp/Telegram). Untuk aturan pemilihan model, lihat [/concepts/models](/id/concepts/models). ## Aturan cepat -- Ref model menggunakan `provider/model` (contoh: `opencode/claude-opus-4-6`). +- Referensi model menggunakan `provider/model` (contoh: `opencode/claude-opus-4-6`). - Jika Anda menetapkan `agents.defaults.models`, itu menjadi allowlist. -- Helper CLI: `openclaw onboard`, `openclaw models list`, `openclaw models set `. -- Aturan fallback runtime, probe cooldown, dan persistensi override sesi +- Pembantu CLI: `openclaw onboard`, `openclaw models list`, `openclaw models set `. +- Aturan runtime fallback, probe cooldown, dan persistensi override sesi didokumentasikan di [/concepts/model-failover](/id/concepts/model-failover). - `models.providers.*.models[].contextWindow` adalah metadata model native; `models.providers.*.models[].contextTokens` adalah batas runtime efektif. -- Plugin provider dapat menyuntikkan katalog model melalui `registerProvider({ catalog })`; - OpenClaw menggabungkan output tersebut ke dalam `models.providers` sebelum menulis +- Plugin penyedia dapat menyuntikkan katalog model melalui `registerProvider({ catalog })`; + OpenClaw menggabungkan output tersebut ke `models.providers` sebelum menulis `models.json`. -- Manifes provider dapat mendeklarasikan `providerAuthEnvVars` agar probe auth berbasis env - generik tidak perlu memuat runtime plugin. Peta env-var inti yang tersisa - kini hanya untuk penyedia non-plugin/inti dan beberapa kasus prioritas generik - seperti onboarding Anthropic dengan API key terlebih dahulu. -- Plugin provider juga dapat memiliki perilaku runtime provider melalui +- Manifest penyedia dapat mendeklarasikan `providerAuthEnvVars` sehingga probe auth + berbasis env generik tidak perlu memuat runtime plugin. Peta env-var inti yang + tersisa sekarang hanya untuk penyedia inti/non-plugin dan beberapa kasus + prioritas generik seperti onboarding Anthropic dengan API key lebih dulu. +- Plugin penyedia juga dapat memiliki perilaku runtime penyedia melalui `normalizeModelId`, `normalizeTransport`, `normalizeConfig`, `applyNativeStreamingUsageCompat`, `resolveConfigApiKey`, `resolveSyntheticAuth`, `shouldDeferSyntheticProfileAuth`, @@ -52,212 +52,213 @@ Untuk aturan pemilihan model, lihat [/concepts/models](/id/concepts/models). `resolveDefaultThinkingLevel`, `applyConfigDefaults`, `isModernModelRef`, `prepareRuntimeAuth`, `resolveUsageAuth`, `fetchUsageSnapshot`, dan `onModelSelected`. -- Catatan: runtime provider `capabilities` adalah metadata runner bersama (keluarga provider, kekhasan transkrip/tooling, petunjuk transport/cache). Ini tidak sama dengan [model capability publik](/id/plugins/architecture#public-capability-model) +- Catatan: `capabilities` runtime penyedia adalah metadata runner bersama (keluarga penyedia, + keanehan transkrip/perkakas, petunjuk transport/cache). Ini bukan + hal yang sama dengan [model capability publik](/id/plugins/architecture#public-capability-model) yang menjelaskan apa yang didaftarkan sebuah plugin (inferensi teks, ucapan, dll.). -## Perilaku provider yang dimiliki plugin +## Perilaku penyedia yang dimiliki plugin -Plugin provider kini dapat memiliki sebagian besar logika spesifik provider sementara OpenClaw menjaga +Plugin penyedia kini dapat memiliki sebagian besar logika khusus penyedia sementara OpenClaw mempertahankan loop inferensi generik. -Pembagian umum: +Pemisahan tipikal: -- `auth[].run` / `auth[].runNonInteractive`: provider memiliki alur onboarding/login +- `auth[].run` / `auth[].runNonInteractive`: penyedia memiliki alur onboarding/login untuk `openclaw onboard`, `openclaw models auth`, dan penyiapan headless -- `wizard.setup` / `wizard.modelPicker`: provider memiliki label pilihan auth, - alias lama, petunjuk allowlist onboarding, dan entri setup di pemilih onboarding/model -- `catalog`: provider muncul di `models.providers` -- `normalizeModelId`: provider menormalkan id model lama/pratinjau sebelum +- `wizard.setup` / `wizard.modelPicker`: penyedia memiliki label pilihan auth, + alias lama, petunjuk allowlist onboarding, dan entri penyiapan di pemilih onboarding/model +- `catalog`: penyedia muncul di `models.providers` +- `normalizeModelId`: penyedia menormalkan id model lama/pratinjau sebelum lookup atau kanonisasi -- `normalizeTransport`: provider menormalkan `api` / `baseUrl` keluarga transport - sebelum perakitan model generik; OpenClaw memeriksa provider yang cocok terlebih dahulu, - lalu plugin provider lain yang mendukung hook sampai salah satunya benar-benar mengubah +- `normalizeTransport`: penyedia menormalkan keluarga transport `api` / `baseUrl` + sebelum perakitan model generik; OpenClaw memeriksa penyedia yang cocok terlebih dahulu, + lalu plugin penyedia lain yang mendukung hook sampai salah satunya benar-benar mengubah transport -- `normalizeConfig`: provider menormalkan konfigurasi `models.providers.` sebelum - digunakan runtime; OpenClaw memeriksa provider yang cocok terlebih dahulu, lalu provider lain +- `normalizeConfig`: penyedia menormalkan konfigurasi `models.providers.` sebelum + digunakan runtime; OpenClaw memeriksa penyedia yang cocok terlebih dahulu, lalu plugin penyedia lain yang mendukung hook sampai salah satunya benar-benar mengubah konfigurasi. Jika tidak ada - hook provider yang menulis ulang konfigurasi, helper keluarga Google bawaan yang dibundel tetap - menormalkan entri provider Google yang didukung. -- `applyNativeStreamingUsageCompat`: provider menerapkan penulisan ulang kompatibilitas penggunaan streaming native berbasis endpoint untuk provider konfigurasi -- `resolveConfigApiKey`: provider menyelesaikan auth penanda env untuk provider konfigurasi + hook penyedia yang menulis ulang konfigurasi, helper keluarga Google bawaan yang dibundel tetap + menormalkan entri penyedia Google yang didukung. +- `applyNativeStreamingUsageCompat`: penyedia menerapkan penulisan ulang kompatibilitas penggunaan streaming native berbasis endpoint untuk penyedia konfigurasi +- `resolveConfigApiKey`: penyedia menyelesaikan auth penanda env untuk penyedia konfigurasi tanpa memaksa pemuatan auth runtime penuh. `amazon-bedrock` juga memiliki resolver penanda env AWS bawaan di sini, meskipun auth runtime Bedrock menggunakan rantai default AWS SDK. -- `resolveSyntheticAuth`: provider dapat mengekspos ketersediaan auth lokal/self-hosted atau auth - berbasis konfigurasi lain tanpa menyimpan secret plaintext -- `shouldDeferSyntheticProfileAuth`: provider dapat menandai placeholder profil sintetis yang tersimpan - sebagai prioritas lebih rendah daripada auth berbasis env/konfigurasi -- `resolveDynamicModel`: provider menerima id model yang belum ada di katalog statis lokal -- `prepareDynamicModel`: provider memerlukan refresh metadata sebelum mencoba lagi +- `resolveSyntheticAuth`: penyedia dapat mengekspos ketersediaan auth lokal/self-hosted atau auth berbasis konfigurasi lainnya + tanpa menyimpan secret plaintext +- `shouldDeferSyntheticProfileAuth`: penyedia dapat menandai placeholder profil sintetis yang tersimpan + memiliki prioritas lebih rendah daripada auth berbasis env/konfigurasi +- `resolveDynamicModel`: penyedia menerima id model yang belum ada di katalog statis lokal +- `prepareDynamicModel`: penyedia memerlukan refresh metadata sebelum mencoba lagi resolusi dinamis -- `normalizeResolvedModel`: provider memerlukan penulisan ulang transport atau base URL -- `contributeResolvedModelCompat`: provider menyumbangkan flag kompatibilitas untuk - model vendor mereka bahkan ketika model tersebut datang melalui transport kompatibel lain -- `capabilities`: provider memublikasikan kekhasan transkrip/tooling/keluarga provider -- `normalizeToolSchemas`: provider membersihkan skema tool sebelum - runner tersemat melihatnya -- `inspectToolSchemas`: provider menampilkan peringatan skema spesifik transport +- `normalizeResolvedModel`: penyedia memerlukan penulisan ulang transport atau base URL +- `contributeResolvedModelCompat`: penyedia menyumbangkan flag compat untuk + model vendornya bahkan ketika model itu datang melalui transport kompatibel lain +- `capabilities`: penyedia menerbitkan keanehan transkrip/perkakas/keluarga penyedia +- `normalizeToolSchemas`: penyedia membersihkan schema tool sebelum runner + tersemat melihatnya +- `inspectToolSchemas`: penyedia memunculkan peringatan schema khusus transport setelah normalisasi -- `resolveReasoningOutputMode`: provider memilih kontrak output reasoning - native vs bertag -- `prepareExtraParams`: provider menetapkan default atau menormalkan param permintaan per-model -- `createStreamFn`: provider mengganti jalur stream normal dengan transport - kustom sepenuhnya -- `wrapStreamFn`: provider menerapkan wrapper kompatibilitas request header/body/model -- `resolveTransportTurnState`: provider menyediakan header atau metadata +- `resolveReasoningOutputMode`: penyedia memilih kontrak output reasoning native vs bertag +- `prepareExtraParams`: penyedia menetapkan default atau menormalkan parameter permintaan per model +- `createStreamFn`: penyedia mengganti jalur stream normal dengan transport kustom sepenuhnya +- `wrapStreamFn`: penyedia menerapkan wrapper kompatibilitas header/body/model permintaan +- `resolveTransportTurnState`: penyedia memasok header atau metadata transport native per giliran -- `resolveWebSocketSessionPolicy`: provider menyediakan header sesi WebSocket native +- `resolveWebSocketSessionPolicy`: penyedia memasok header sesi WebSocket native atau kebijakan cooldown sesi -- `createEmbeddingProvider`: provider memiliki perilaku embedding memori ketika - itu semestinya berada di plugin provider, bukan di switchboard embedding inti -- `formatApiKey`: provider memformat profil auth yang tersimpan menjadi string - `apiKey` runtime yang diharapkan oleh transport -- `refreshOAuth`: provider memiliki refresh OAuth ketika refresher bersama `pi-ai` - tidak cukup -- `buildAuthDoctorHint`: provider menambahkan panduan perbaikan ketika refresh OAuth +- `createEmbeddingProvider`: penyedia memiliki perilaku embedding memori ketika + hal itu lebih tepat berada di plugin penyedia daripada switchboard embedding inti +- `formatApiKey`: penyedia memformat profil auth yang tersimpan ke dalam string + `apiKey` runtime yang diharapkan transport +- `refreshOAuth`: penyedia memiliki refresh OAuth ketika refresher bersama `pi-ai` + tidak memadai +- `buildAuthDoctorHint`: penyedia menambahkan panduan perbaikan ketika refresh OAuth gagal -- `matchesContextOverflowError`: provider mengenali - error overflow context-window spesifik provider yang akan terlewat oleh heuristik generik -- `classifyFailoverReason`: provider memetakan error transport/API mentah spesifik provider - ke alasan failover seperti rate limit atau overload -- `isCacheTtlEligible`: provider menentukan id model upstream mana yang mendukung TTL cache prompt -- `buildMissingAuthMessage`: provider mengganti error auth-store generik - dengan petunjuk pemulihan spesifik provider -- `suppressBuiltInModel`: provider menyembunyikan baris upstream yang usang dan dapat mengembalikan +- `matchesContextOverflowError`: penyedia mengenali error overflow jendela konteks + khusus penyedia yang akan terlewat oleh heuristik generik +- `classifyFailoverReason`: penyedia memetakan error mentah transport/API + khusus penyedia ke alasan failover seperti rate limit atau overload +- `isCacheTtlEligible`: penyedia menentukan id model upstream mana yang mendukung TTL prompt-cache +- `buildMissingAuthMessage`: penyedia mengganti error auth-store generik + dengan petunjuk pemulihan khusus penyedia +- `suppressBuiltInModel`: penyedia menyembunyikan baris upstream yang usang dan dapat mengembalikan error milik vendor untuk kegagalan resolusi langsung -- `augmentModelCatalog`: provider menambahkan baris katalog sintetis/akhir setelah +- `augmentModelCatalog`: penyedia menambahkan baris katalog sintetis/final setelah discovery dan penggabungan konfigurasi -- `isBinaryThinking`: provider memiliki UX thinking on/off biner -- `supportsXHighThinking`: provider mengikutkan model tertentu ke `xhigh` -- `resolveDefaultThinkingLevel`: provider memiliki kebijakan default `/think` untuk +- `isBinaryThinking`: penyedia memiliki UX thinking biner nyala/mati +- `supportsXHighThinking`: penyedia mengikutkan model terpilih ke `xhigh` +- `resolveDefaultThinkingLevel`: penyedia memiliki kebijakan default `/think` untuk keluarga model -- `applyConfigDefaults`: provider menerapkan default global spesifik provider +- `applyConfigDefaults`: penyedia menerapkan default global khusus penyedia selama materialisasi konfigurasi berdasarkan mode auth, env, atau keluarga model -- `isModernModelRef`: provider memiliki pencocokan model pilihan live/smoke -- `prepareRuntimeAuth`: provider mengubah kredensial yang dikonfigurasi menjadi token runtime - berumur pendek -- `resolveUsageAuth`: provider menyelesaikan kredensial penggunaan/kuota untuk `/usage` +- `isModernModelRef`: penyedia memiliki pencocokan model pilihan live/smoke +- `prepareRuntimeAuth`: penyedia mengubah kredensial terkonfigurasi menjadi token runtime + berumur singkat +- `resolveUsageAuth`: penyedia menyelesaikan kredensial usage/kuota untuk `/usage` dan permukaan status/pelaporan terkait -- `fetchUsageSnapshot`: provider memiliki pengambilan/penguraian endpoint penggunaan sementara +- `fetchUsageSnapshot`: penyedia memiliki pengambilan/parsing endpoint usage sementara inti tetap memiliki shell ringkasan dan pemformatannya -- `onModelSelected`: provider menjalankan efek samping pasca-pemilihan seperti - telemetri atau pembukuan sesi milik provider +- `onModelSelected`: penyedia menjalankan efek samping pasca-pemilihan seperti + telemetri atau pencatatan sesi milik penyedia -Contoh bawaan saat ini: +Contoh bundel saat ini: -- `anthropic`: fallback kompatibilitas-maju Claude 4.6, petunjuk perbaikan auth, pengambilan endpoint - penggunaan, metadata cache-TTL/keluarga provider, dan default konfigurasi global +- `anthropic`: fallback kompatibilitas maju Claude 4.6, petunjuk perbaikan auth, pengambilan + endpoint usage, metadata cache-TTL/keluarga penyedia, dan default konfigurasi global yang sadar auth -- `amazon-bedrock`: pencocokan context-overflow dan klasifikasi alasan - failover milik provider untuk error throttle/belum-siap spesifik Bedrock, ditambah +- `amazon-bedrock`: pencocokan context-overflow milik penyedia dan klasifikasi + alasan failover untuk error throttle/not-ready khusus Bedrock, ditambah keluarga replay bersama `anthropic-by-model` untuk guard kebijakan replay khusus Claude - pada trafik Anthropic -- `anthropic-vertex`: guard kebijakan replay khusus Claude pada - trafik pesan Anthropic -- `openrouter`: id model pass-through, wrapper request, petunjuk capability provider, - sanitasi thought-signature Gemini pada trafik proxy Gemini, - injeksi reasoning proxy melalui keluarga stream `openrouter-thinking`, penerusan metadata routing, dan kebijakan cache-TTL -- `github-copilot`: onboarding/login perangkat, fallback model kompatibilitas-maju, + pada lalu lintas Anthropic +- `anthropic-vertex`: guard kebijakan replay khusus Claude pada lalu lintas + pesan Anthropic +- `openrouter`: id model pass-through, wrapper permintaan, petunjuk capability penyedia, + sanitasi thought-signature Gemini pada lalu lintas proxy Gemini, injeksi reasoning proxy + melalui keluarga stream `openrouter-thinking`, penerusan metadata routing, + dan kebijakan cache-TTL +- `github-copilot`: onboarding/login perangkat, fallback model kompatibilitas maju, petunjuk transkrip Claude-thinking, pertukaran token runtime, dan pengambilan endpoint - penggunaan -- `openai`: fallback kompatibilitas-maju GPT-5.4, normalisasi transport OpenAI langsung, - petunjuk auth hilang yang sadar Codex, penekanan Spark, baris katalog - OpenAI/Codex sintetis, kebijakan thinking/model live, normalisasi alias token penggunaan + usage +- `openai`: fallback kompatibilitas maju GPT-5.4, normalisasi transport OpenAI langsung, + petunjuk auth hilang yang sadar Codex, penekanan Spark, baris katalog sintetis + OpenAI/Codex, kebijakan thinking/model live, normalisasi alias token usage (`input` / `output` dan keluarga `prompt` / `completion`), keluarga stream bersama - `openai-responses-defaults` untuk wrapper OpenAI/Codex native, metadata keluarga provider, - pendaftaran provider generasi gambar terbundel untuk `gpt-image-1`, dan pendaftaran provider generasi video - terbundel untuk `sora-2` -- `google` dan `google-gemini-cli`: fallback kompatibilitas-maju Gemini 3.1, + `openai-responses-defaults` untuk wrapper OpenAI/Codex native, metadata keluarga penyedia, + registrasi penyedia pembuatan gambar bundel untuk `gpt-image-1`, dan registrasi penyedia + pembuatan video bundel untuk `sora-2` +- `google` dan `google-gemini-cli`: fallback kompatibilitas maju Gemini 3.1, validasi replay Gemini native, sanitasi replay bootstrap, mode output - reasoning bertag, pencocokan model modern, pendaftaran provider generasi gambar - terbundel untuk model pratinjau gambar Gemini, dan pendaftaran provider generasi - video terbundel untuk model Veo; OAuth Gemini CLI juga - memiliki pemformatan token profil auth, penguraian token penggunaan, dan pengambilan endpoint kuota - untuk permukaan penggunaan + reasoning bertag, pencocokan model modern, registrasi penyedia pembuatan gambar bundel + untuk model pratinjau gambar Gemini, dan registrasi penyedia pembuatan + video bundel untuk model Veo; OAuth Gemini CLI juga memiliki pemformatan token profil auth, + parsing token usage, dan pengambilan endpoint kuota untuk permukaan usage - `moonshot`: transport bersama, normalisasi payload thinking milik plugin -- `kilocode`: transport bersama, header request milik plugin, normalisasi payload reasoning, +- `kilocode`: transport bersama, header permintaan milik plugin, normalisasi payload reasoning, sanitasi thought-signature proxy-Gemini, dan kebijakan cache-TTL -- `zai`: fallback kompatibilitas-maju GLM-5, default `tool_stream`, kebijakan cache-TTL, - kebijakan thinking biner/model live, dan auth penggunaan + pengambilan kuota; - id `glm-5*` yang tidak dikenal disintesis dari templat `glm-4.7` terbundel +- `zai`: fallback kompatibilitas maju GLM-5, default `tool_stream`, kebijakan cache-TTL, + kebijakan thinking biner/model live, serta auth usage + pengambilan kuota; + id `glm-5*` yang tidak dikenal disintesis dari templat `glm-4.7` bawaan - `xai`: normalisasi transport Responses native, penulisan ulang alias `/fast` untuk - varian cepat Grok, default `tool_stream`, pembersihan skema tool / - payload reasoning spesifik xAI, dan pendaftaran provider generasi video terbundel + varian cepat Grok, default `tool_stream`, pembersihan schema tool / + payload reasoning khusus xAI, dan registrasi penyedia pembuatan video bundel untuk `grok-imagine-video` - `mistral`: metadata capability milik plugin -- `opencode` dan `opencode-go`: metadata capability milik plugin ditambah +- `opencode` dan `opencode-go`: metadata capability milik plugin plus sanitasi thought-signature proxy-Gemini -- `alibaba`: katalog generasi video milik plugin untuk ref model Wan langsung +- `alibaba`: katalog pembuatan video milik plugin untuk referensi model Wan langsung seperti `alibaba/wan2.6-t2v` -- `byteplus`: katalog milik plugin ditambah pendaftaran provider generasi video - terbundel untuk model text-to-video/image-to-video Seedance -- `fal`: pendaftaran provider generasi video terbundel untuk - pendaftaran provider generasi gambar pihak ketiga yang di-host untuk model gambar FLUX ditambah pendaftaran provider generasi - video terbundel untuk model video pihak ketiga yang di-host +- `byteplus`: katalog milik plugin plus registrasi penyedia pembuatan video bundel + untuk model text-to-video/image-to-video Seedance +- `fal`: registrasi penyedia pembuatan video bundel untuk image-generation pihak ketiga terhosting + registrasi penyedia pembuatan gambar untuk model gambar FLUX plus registrasi penyedia + pembuatan video bundel untuk model video pihak ketiga terhosting - `cloudflare-ai-gateway`, `huggingface`, `kimi`, `nvidia`, `qianfan`, `stepfun`, `synthetic`, `venice`, `vercel-ai-gateway`, dan `volcengine`: hanya katalog milik plugin -- `qwen`: katalog milik plugin untuk model teks ditambah pendaftaran provider - media-understanding dan generasi video bersama untuk permukaan multimodalnya; - generasi video Qwen menggunakan endpoint video DashScope Standar - dengan model Wan terbundel seperti `wan2.6-t2v` dan `wan2.7-r2v` -- `runway`: pendaftaran provider generasi video milik plugin untuk model native - Runway berbasis task seperti `gen4.5` -- `minimax`: katalog milik plugin, pendaftaran provider generasi video terbundel - untuk model video Hailuo, pendaftaran provider generasi gambar terbundel - untuk `image-01`, pemilihan kebijakan replay Anthropic/OpenAI hibrida, dan logika auth/snapshot penggunaan -- `together`: katalog milik plugin ditambah pendaftaran provider generasi video terbundel +- `qwen`: katalog milik plugin untuk model teks plus registrasi penyedia + media-understanding dan pembuatan video bersama untuk permukaan multimodalnya; + pembuatan video Qwen menggunakan endpoint video DashScope Standar dengan model Wan + bundel seperti `wan2.6-t2v` dan `wan2.7-r2v` +- `runway`: registrasi penyedia pembuatan video milik plugin untuk model native + berbasis tugas Runway seperti `gen4.5` +- `minimax`: katalog milik plugin, registrasi penyedia pembuatan video bundel + untuk model video Hailuo, registrasi penyedia pembuatan gambar bundel + untuk `image-01`, pemilihan kebijakan replay Anthropic/OpenAI hibrida, + dan logika auth/snapshot usage +- `together`: katalog milik plugin plus registrasi penyedia pembuatan video bundel untuk model video Wan -- `xiaomi`: katalog milik plugin ditambah logika auth/snapshot penggunaan +- `xiaomi`: katalog milik plugin plus logika auth/snapshot usage -Plugin `openai` terbundel kini memiliki kedua id provider: `openai` dan +Plugin `openai` yang dibundel sekarang memiliki kedua id penyedia: `openai` dan `openai-codex`. -Itu mencakup provider yang masih cocok dengan transport normal OpenClaw. Provider -yang memerlukan eksekutor request kustom sepenuhnya adalah permukaan ekstensi -yang terpisah dan lebih mendalam. +Itu mencakup penyedia yang masih sesuai dengan transport normal OpenClaw. Penyedia +yang membutuhkan eksekutor permintaan kustom sepenuhnya adalah permukaan ekstensi +terpisah yang lebih dalam. ## Rotasi API key -- Mendukung rotasi provider generik untuk provider yang dipilih. +- Mendukung rotasi penyedia generik untuk penyedia tertentu yang dipilih. - Konfigurasikan beberapa key melalui: - - `OPENCLAW_LIVE__KEY` (satu override live, prioritas tertinggi) + - `OPENCLAW_LIVE__KEY` (override live tunggal, prioritas tertinggi) - `_API_KEYS` (daftar dipisahkan koma atau titik koma) - `_API_KEY` (key utama) - `_API_KEY_*` (daftar bernomor, misalnya `_API_KEY_1`) -- Untuk provider Google, `GOOGLE_API_KEY` juga disertakan sebagai fallback. +- Untuk penyedia Google, `GOOGLE_API_KEY` juga disertakan sebagai fallback. - Urutan pemilihan key mempertahankan prioritas dan menghapus duplikasi nilai. - Permintaan dicoba ulang dengan key berikutnya hanya pada respons rate-limit (misalnya `429`, `rate_limit`, `quota`, `resource exhausted`, `Too many concurrent requests`, `ThrottlingException`, `concurrency limit reached`, - `workers_ai ... quota limit exceeded`, atau pesan batas penggunaan berkala). -- Kegagalan non-rate-limit langsung gagal; rotasi key tidak dicoba. + `workers_ai ... quota limit exceeded`, atau pesan batas penggunaan periodik). +- Kegagalan non-rate-limit langsung gagal; tidak ada rotasi key yang dicoba. - Ketika semua key kandidat gagal, error akhir dikembalikan dari percobaan terakhir. -## Provider bawaan (katalog pi-ai) +## Penyedia bawaan (katalog pi-ai) -OpenClaw dikirim dengan katalog pi‑ai. Provider ini tidak memerlukan konfigurasi +OpenClaw disertakan dengan katalog pi‑ai. Penyedia ini tidak memerlukan konfigurasi `models.providers`; cukup tetapkan auth + pilih model. ### OpenAI -- Provider: `openai` +- Penyedia: `openai` - Auth: `OPENAI_API_KEY` -- Rotasi opsional: `OPENAI_API_KEYS`, `OPENAI_API_KEY_1`, `OPENAI_API_KEY_2`, ditambah `OPENCLAW_LIVE_OPENAI_KEY` (satu override) +- Rotasi opsional: `OPENAI_API_KEYS`, `OPENAI_API_KEY_1`, `OPENAI_API_KEY_2`, plus `OPENCLAW_LIVE_OPENAI_KEY` (override tunggal) - Contoh model: `openai/gpt-5.4`, `openai/gpt-5.4-pro` - CLI: `openclaw onboard --auth-choice openai-api-key` -- Transport default adalah `auto` (WebSocket-first, fallback SSE) +- Transport default adalah `auto` (WebSocket lebih dulu, fallback SSE) - Override per model melalui `agents.defaults.models["openai/"].params.transport` (`"sse"`, `"websocket"`, atau `"auto"`) -- Warm-up WebSocket OpenAI Responses default-nya aktif melalui `params.openaiWsWarmup` (`true`/`false`) +- Pemanasan WebSocket OpenAI Responses secara default aktif melalui `params.openaiWsWarmup` (`true`/`false`) - Pemrosesan prioritas OpenAI dapat diaktifkan melalui `agents.defaults.models["openai/"].params.serviceTier` -- `/fast` dan `params.fastMode` memetakan request Responses `openai/*` langsung ke `service_tier=priority` pada `api.openai.com` -- Gunakan `params.serviceTier` saat Anda ingin tier eksplisit alih-alih toggle `/fast` bersama +- `/fast` dan `params.fastMode` memetakan permintaan Responses `openai/*` langsung ke `service_tier=priority` pada `api.openai.com` +- Gunakan `params.serviceTier` bila Anda menginginkan tier eksplisit alih-alih toggle `/fast` bersama - Header atribusi OpenClaw tersembunyi (`originator`, `version`, - `User-Agent`) hanya berlaku pada trafik OpenAI native ke `api.openai.com`, bukan - proxy kompatibel OpenAI generik -- Rute OpenAI native juga mempertahankan Responses `store`, petunjuk prompt-cache, dan + `User-Agent`) hanya berlaku pada lalu lintas OpenAI native ke `api.openai.com`, bukan + proxy generik yang kompatibel dengan OpenAI +- Rute OpenAI native juga mempertahankan `store` Responses, petunjuk prompt-cache, dan pembentukan payload kompatibilitas reasoning OpenAI; rute proxy tidak -- `openai/gpt-5.3-codex-spark` sengaja disembunyikan di OpenClaw karena API OpenAI live menolaknya; Spark diperlakukan sebagai khusus Codex +- `openai/gpt-5.3-codex-spark` sengaja ditekan di OpenClaw karena API OpenAI live menolaknya; Spark diperlakukan sebagai khusus Codex ```json5 { @@ -267,14 +268,14 @@ OpenClaw dikirim dengan katalog pi‑ai. Provider ini tidak memerlukan konfigura ### Anthropic -- Provider: `anthropic` +- Penyedia: `anthropic` - Auth: `ANTHROPIC_API_KEY` -- Rotasi opsional: `ANTHROPIC_API_KEYS`, `ANTHROPIC_API_KEY_1`, `ANTHROPIC_API_KEY_2`, ditambah `OPENCLAW_LIVE_ANTHROPIC_KEY` (satu override) +- Rotasi opsional: `ANTHROPIC_API_KEYS`, `ANTHROPIC_API_KEY_1`, `ANTHROPIC_API_KEY_2`, plus `OPENCLAW_LIVE_ANTHROPIC_KEY` (override tunggal) - Contoh model: `anthropic/claude-opus-4-6` - CLI: `openclaw onboard --auth-choice apiKey` -- Permintaan Anthropic publik langsung mendukung toggle `/fast` bersama dan `params.fastMode`, termasuk trafik terautentikasi API key dan OAuth yang dikirim ke `api.anthropic.com`; OpenClaw memetakannya ke Anthropic `service_tier` (`auto` vs `standard_only`) -- Catatan Anthropic: staf Anthropic memberi tahu kami bahwa penggunaan Claude CLI gaya OpenClaw kembali diizinkan, jadi OpenClaw menganggap penggunaan ulang Claude CLI dan `claude -p` diizinkan untuk integrasi ini kecuali Anthropic menerbitkan kebijakan baru. -- Token setup Anthropic tetap tersedia sebagai jalur token OpenClaw yang didukung, tetapi OpenClaw kini lebih memilih penggunaan ulang Claude CLI dan `claude -p` bila tersedia. +- Permintaan Anthropic publik langsung mendukung toggle `/fast` bersama dan `params.fastMode`, termasuk lalu lintas terautentikasi API key dan OAuth yang dikirim ke `api.anthropic.com`; OpenClaw memetakannya ke Anthropic `service_tier` (`auto` vs `standard_only`) +- Catatan Anthropic: staf Anthropic memberi tahu kami bahwa penggunaan Claude CLI gaya OpenClaw diizinkan lagi, jadi OpenClaw memperlakukan penggunaan ulang Claude CLI dan penggunaan `claude -p` sebagai diizinkan untuk integrasi ini kecuali Anthropic menerbitkan kebijakan baru. +- Token setup Anthropic tetap tersedia sebagai jalur token OpenClaw yang didukung, tetapi OpenClaw sekarang lebih mengutamakan penggunaan ulang Claude CLI dan `claude -p` saat tersedia. ```json5 { @@ -284,20 +285,20 @@ OpenClaw dikirim dengan katalog pi‑ai. Provider ini tidak memerlukan konfigura ### OpenAI Code (Codex) -- Provider: `openai-codex` +- Penyedia: `openai-codex` - Auth: OAuth (ChatGPT) - Contoh model: `openai-codex/gpt-5.4` - CLI: `openclaw onboard --auth-choice openai-codex` atau `openclaw models auth login --provider openai-codex` -- Transport default adalah `auto` (WebSocket-first, fallback SSE) +- Transport default adalah `auto` (WebSocket lebih dulu, fallback SSE) - Override per model melalui `agents.defaults.models["openai-codex/"].params.transport` (`"sse"`, `"websocket"`, atau `"auto"`) -- `params.serviceTier` juga diteruskan pada request Responses Codex native (`chatgpt.com/backend-api`) +- `params.serviceTier` juga diteruskan pada permintaan Responses Codex native (`chatgpt.com/backend-api`) - Header atribusi OpenClaw tersembunyi (`originator`, `version`, - `User-Agent`) hanya dilampirkan pada trafik Codex native ke - `chatgpt.com/backend-api`, bukan proxy kompatibel OpenAI generik -- Berbagi toggle `/fast` dan konfigurasi `params.fastMode` yang sama dengan `openai/*` langsung; OpenClaw memetakannya ke `service_tier=priority` -- `openai-codex/gpt-5.3-codex-spark` tetap tersedia saat katalog OAuth Codex mengeksposnya; bergantung pada entitlement -- `openai-codex/gpt-5.4` mempertahankan `contextWindow = 1050000` native dan default runtime `contextTokens = 272000`; override batas runtime dengan `models.providers.openai-codex.models[].contextTokens` -- Catatan kebijakan: OpenAI Codex OAuth secara eksplisit didukung untuk tool/alur kerja eksternal seperti OpenClaw. + `User-Agent`) hanya dilampirkan pada lalu lintas Codex native ke + `chatgpt.com/backend-api`, bukan proxy generik yang kompatibel dengan OpenAI +- Berbagi toggle `/fast` dan konfigurasi `params.fastMode` yang sama seperti `openai/*` langsung; OpenClaw memetakannya ke `service_tier=priority` +- `openai-codex/gpt-5.3-codex-spark` tetap tersedia ketika katalog OAuth Codex mengeksposnya; bergantung pada entitlement +- `openai-codex/gpt-5.4` mempertahankan `contextWindow = 1050000` native dan runtime default `contextTokens = 272000`; override batas runtime dengan `models.providers.openai-codex.models[].contextTokens` +- Catatan kebijakan: OAuth OpenAI Codex secara eksplisit didukung untuk tool/alur kerja eksternal seperti OpenClaw. ```json5 { @@ -317,17 +318,17 @@ OpenClaw dikirim dengan katalog pi‑ai. Provider ini tidak memerlukan konfigura } ``` -### Opsi hosted bergaya langganan lainnya +### Opsi terhosting bergaya langganan lainnya -- [Qwen Cloud](/id/providers/qwen): permukaan provider Qwen Cloud ditambah pemetaan endpoint Alibaba DashScope dan Coding Plan +- [Qwen Cloud](/id/providers/qwen): permukaan penyedia Qwen Cloud plus pemetaan endpoint Alibaba DashScope dan Coding Plan - [MiniMax](/id/providers/minimax): akses OAuth atau API key MiniMax Coding Plan - [GLM Models](/id/providers/glm): endpoint Z.AI Coding Plan atau API umum ### OpenCode - Auth: `OPENCODE_API_KEY` (atau `OPENCODE_ZEN_API_KEY`) -- Provider runtime Zen: `opencode` -- Provider runtime Go: `opencode-go` +- Penyedia runtime Zen: `opencode` +- Penyedia runtime Go: `opencode-go` - Contoh model: `opencode/claude-opus-4-6`, `opencode-go/kimi-k2.5` - CLI: `openclaw onboard --auth-choice opencode-zen` atau `openclaw onboard --auth-choice opencode-go` @@ -339,21 +340,21 @@ OpenClaw dikirim dengan katalog pi‑ai. Provider ini tidak memerlukan konfigura ### Google Gemini (API key) -- Provider: `google` +- Penyedia: `google` - Auth: `GEMINI_API_KEY` -- Rotasi opsional: `GEMINI_API_KEYS`, `GEMINI_API_KEY_1`, `GEMINI_API_KEY_2`, fallback `GOOGLE_API_KEY`, dan `OPENCLAW_LIVE_GEMINI_KEY` (satu override) +- Rotasi opsional: `GEMINI_API_KEYS`, `GEMINI_API_KEY_1`, `GEMINI_API_KEY_2`, fallback `GOOGLE_API_KEY`, dan `OPENCLAW_LIVE_GEMINI_KEY` (override tunggal) - Contoh model: `google/gemini-3.1-pro-preview`, `google/gemini-3-flash-preview` - Kompatibilitas: konfigurasi OpenClaw lama yang menggunakan `google/gemini-3.1-flash-preview` dinormalkan menjadi `google/gemini-3-flash-preview` - CLI: `openclaw onboard --auth-choice gemini-api-key` -- Proses Gemini langsung juga menerima `agents.defaults.models["google/"].params.cachedContent` - (atau `cached_content` lama) untuk meneruskan handle - `cachedContents/...` native provider; hit cache Gemini muncul sebagai OpenClaw `cacheRead` +- Eksekusi Gemini langsung juga menerima `agents.defaults.models["google/"].params.cachedContent` + (atau `cached_content` lama) untuk meneruskan handle `cachedContents/...` + native penyedia; cache hit Gemini muncul sebagai OpenClaw `cacheRead` ### Google Vertex dan Gemini CLI -- Provider: `google-vertex`, `google-gemini-cli` +- Penyedia: `google-vertex`, `google-gemini-cli` - Auth: Vertex menggunakan gcloud ADC; Gemini CLI menggunakan alur OAuth-nya -- Perhatian: OAuth Gemini CLI di OpenClaw adalah integrasi tidak resmi. Beberapa pengguna melaporkan pembatasan akun Google setelah menggunakan klien pihak ketiga. Tinjau persyaratan Google dan gunakan akun yang tidak kritis jika Anda memilih untuk melanjutkan. +- Peringatan: OAuth Gemini CLI di OpenClaw adalah integrasi tidak resmi. Beberapa pengguna melaporkan pembatasan akun Google setelah menggunakan klien pihak ketiga. Tinjau persyaratan Google dan gunakan akun yang tidak kritis jika Anda memilih untuk melanjutkan. - OAuth Gemini CLI dikirim sebagai bagian dari plugin `google` yang dibundel. - Instal Gemini CLI terlebih dahulu: - `brew install gemini-cli` @@ -361,66 +362,67 @@ OpenClaw dikirim dengan katalog pi‑ai. Provider ini tidak memerlukan konfigura - Aktifkan: `openclaw plugins enable google` - Login: `openclaw models auth login --provider google-gemini-cli --set-default` - Model default: `google-gemini-cli/gemini-3-flash-preview` - - Catatan: Anda **tidak** menempelkan client id atau secret ke `openclaw.json`. Alur login CLI menyimpan + - Catatan: Anda **tidak** menempelkan client id atau secret ke dalam `openclaw.json`. Alur login CLI menyimpan token di profil auth pada host gateway. - Jika permintaan gagal setelah login, tetapkan `GOOGLE_CLOUD_PROJECT` atau `GOOGLE_CLOUD_PROJECT_ID` pada host gateway. - - Balasan JSON Gemini CLI diurai dari `response`; penggunaan fallback ke + - Balasan JSON Gemini CLI diparsing dari `response`; usage menggunakan fallback ke `stats`, dengan `stats.cached` dinormalkan menjadi OpenClaw `cacheRead`. ### Z.AI (GLM) -- Provider: `zai` +- Penyedia: `zai` - Auth: `ZAI_API_KEY` -- Contoh model: `zai/glm-5` +- Contoh model: `zai/glm-5.1` - CLI: `openclaw onboard --auth-choice zai-api-key` - Alias: `z.ai/*` dan `z-ai/*` dinormalkan menjadi `zai/*` - `zai-api-key` mendeteksi otomatis endpoint Z.AI yang cocok; `zai-coding-global`, `zai-coding-cn`, `zai-global`, dan `zai-cn` memaksa permukaan tertentu ### Vercel AI Gateway -- Provider: `vercel-ai-gateway` +- Penyedia: `vercel-ai-gateway` - Auth: `AI_GATEWAY_API_KEY` - Contoh model: `vercel-ai-gateway/anthropic/claude-opus-4.6` - CLI: `openclaw onboard --auth-choice ai-gateway-api-key` ### Kilo Gateway -- Provider: `kilocode` +- Penyedia: `kilocode` - Auth: `KILOCODE_API_KEY` - Contoh model: `kilocode/kilo/auto` - CLI: `openclaw onboard --auth-choice kilocode-api-key` - Base URL: `https://api.kilo.ai/api/gateway/` -- Katalog fallback statis menyertakan `kilocode/kilo/auto`; discovery live +- Katalog fallback statis mengirim `kilocode/kilo/auto`; discovery live `https://api.kilo.ai/api/gateway/models` dapat memperluas katalog runtime - lebih jauh. + lebih lanjut. - Routing upstream yang tepat di balik `kilocode/kilo/auto` dimiliki oleh Kilo Gateway, bukan di-hardcode di OpenClaw. Lihat [/providers/kilocode](/id/providers/kilocode) untuk detail penyiapan. -### Plugin provider terbundel lainnya +### Plugin penyedia bundel lainnya - OpenRouter: `openrouter` (`OPENROUTER_API_KEY`) - Contoh model: `openrouter/auto` -- OpenClaw menerapkan header atribusi aplikasi terdokumentasi OpenRouter hanya ketika - request benar-benar menargetkan `openrouter.ai` -- Penanda `cache_control` Anthropic spesifik OpenRouter juga dibatasi ke +- OpenClaw menerapkan header atribusi aplikasi yang didokumentasikan OpenRouter hanya ketika + permintaan benar-benar menargetkan `openrouter.ai` +- Penanda `cache_control` Anthropic khusus OpenRouter juga dibatasi ke rute OpenRouter yang terverifikasi, bukan URL proxy sembarang -- OpenRouter tetap berada di jalur kompatibel OpenAI bergaya proxy, jadi pembentukan request yang hanya native OpenAI (`serviceTier`, Responses `store`, +- OpenRouter tetap berada pada jalur kompatibel OpenAI bergaya proxy, jadi pembentukan permintaan + native khusus OpenAI (`serviceTier`, Responses `store`, petunjuk prompt-cache, payload kompatibilitas reasoning OpenAI) tidak diteruskan -- Ref OpenRouter berbasis Gemini hanya mempertahankan sanitasi thought-signature proxy-Gemini; +- Referensi OpenRouter berbasis Gemini hanya mempertahankan sanitasi thought-signature proxy-Gemini; validasi replay Gemini native dan penulisan ulang bootstrap tetap nonaktif - Kilo Gateway: `kilocode` (`KILOCODE_API_KEY`) - Contoh model: `kilocode/kilo/auto` -- Ref Kilo berbasis Gemini mempertahankan jalur sanitasi thought-signature +- Referensi Kilo berbasis Gemini mempertahankan jalur sanitasi thought-signature proxy-Gemini yang sama; `kilocode/kilo/auto` dan petunjuk lain yang tidak mendukung proxy-reasoning melewati injeksi reasoning proxy - MiniMax: `minimax` (API key) dan `minimax-portal` (OAuth) - Auth: `MINIMAX_API_KEY` untuk `minimax`; `MINIMAX_OAUTH_TOKEN` atau `MINIMAX_API_KEY` untuk `minimax-portal` - Contoh model: `minimax/MiniMax-M2.7` atau `minimax-portal/MiniMax-M2.7` -- Onboarding/penyiapan API key MiniMax menulis definisi model M2.7 eksplisit dengan - `input: ["text", "image"]`; katalog provider terbundel mempertahankan ref chat - hanya-teks sampai konfigurasi provider tersebut dimaterialisasi +- Penyiapan onboarding/API key MiniMax menulis definisi model M2.7 eksplisit dengan + `input: ["text", "image"]`; katalog penyedia bundel mempertahankan referensi chat + hanya teks sampai konfigurasi penyedia itu dimaterialisasikan - Moonshot: `moonshot` (`MOONSHOT_API_KEY`) - Contoh model: `moonshot/kimi-k2.5` - Kimi Coding: `kimi` (`KIMI_API_KEY` atau `KIMICODE_API_KEY`) @@ -446,10 +448,10 @@ Lihat [/providers/kilocode](/id/providers/kilocode) untuk detail penyiapan. - BytePlus: `byteplus` (`BYTEPLUS_API_KEY`) - Contoh model: `byteplus-plan/ark-code-latest` - xAI: `xai` (`XAI_API_KEY`) - - Request xAI terbundel native menggunakan jalur xAI Responses + - Permintaan xAI bundel native menggunakan jalur xAI Responses - `/fast` atau `params.fastMode: true` menulis ulang `grok-3`, `grok-3-mini`, - `grok-4`, dan `grok-4-0709` ke varian `*-fast` - - `tool_stream` default-nya aktif; tetapkan + `grok-4`, dan `grok-4-0709` ke varian `*-fast` mereka + - `tool_stream` default aktif; tetapkan `agents.defaults.models["xai/"].params.tool_stream` ke `false` untuk menonaktifkannya - Mistral: `mistral` (`MISTRAL_API_KEY`) @@ -457,27 +459,27 @@ Lihat [/providers/kilocode](/id/providers/kilocode) untuk detail penyiapan. - CLI: `openclaw onboard --auth-choice mistral-api-key` - Groq: `groq` (`GROQ_API_KEY`) - Cerebras: `cerebras` (`CEREBRAS_API_KEY`) - - Model GLM di Cerebras menggunakan id `zai-glm-4.7` dan `zai-glm-4.6`. + - Model GLM pada Cerebras menggunakan id `zai-glm-4.7` dan `zai-glm-4.6`. - Base URL kompatibel OpenAI: `https://api.cerebras.ai/v1`. - GitHub Copilot: `github-copilot` (`COPILOT_GITHUB_TOKEN` / `GH_TOKEN` / `GITHUB_TOKEN`) - Contoh model Hugging Face Inference: `huggingface/deepseek-ai/DeepSeek-R1`; CLI: `openclaw onboard --auth-choice huggingface-api-key`. Lihat [Hugging Face (Inference)](/id/providers/huggingface). -## Provider melalui `models.providers` (kustom/base URL) +## Penyedia melalui `models.providers` (kustom/base URL) -Gunakan `models.providers` (atau `models.json`) untuk menambahkan provider -**kustom** atau proxy yang kompatibel OpenAI/Anthropic. +Gunakan `models.providers` (atau `models.json`) untuk menambahkan penyedia **kustom** +atau proxy yang kompatibel dengan OpenAI/Anthropic. -Banyak plugin provider terbundel di bawah ini sudah memublikasikan katalog default. -Gunakan entri `models.providers.` eksplisit hanya jika Anda ingin mengganti +Banyak plugin penyedia bundel di bawah ini sudah menerbitkan katalog default. +Gunakan entri `models.providers.` yang eksplisit hanya ketika Anda ingin menimpa base URL, header, atau daftar model default. ### Moonshot AI (Kimi) -Moonshot dikirim sebagai plugin provider terbundel. Gunakan provider bawaan secara -default, dan tambahkan entri `models.providers.moonshot` eksplisit hanya ketika Anda -perlu mengganti base URL atau metadata model: +Moonshot dikirim sebagai plugin penyedia bundel. Gunakan penyedia bawaan secara +default, dan tambahkan entri `models.providers.moonshot` yang eksplisit hanya ketika Anda +perlu menimpa base URL atau metadata model: -- Provider: `moonshot` +- Penyedia: `moonshot` - Auth: `MOONSHOT_API_KEY` - Contoh model: `moonshot/kimi-k2.5` - CLI: `openclaw onboard --auth-choice moonshot-api-key` atau `openclaw onboard --auth-choice moonshot-api-key-cn` @@ -514,9 +516,9 @@ ID model Kimi K2: ### Kimi Coding -Kimi Coding menggunakan endpoint kompatibel Anthropic milik Moonshot AI: +Kimi Coding menggunakan endpoint Moonshot AI yang kompatibel dengan Anthropic: -- Provider: `kimi` +- Penyedia: `kimi` - Auth: `KIMI_API_KEY` - Contoh model: `kimi/kimi-code` @@ -533,9 +535,9 @@ Kimi Coding menggunakan endpoint kompatibel Anthropic milik Moonshot AI: ### Volcano Engine (Doubao) -Volcano Engine (火山引擎) menyediakan akses ke Doubao dan model lain di China. +Volcano Engine (火山引擎) menyediakan akses ke Doubao dan model lain di Tiongkok. -- Provider: `volcengine` (coding: `volcengine-plan`) +- Penyedia: `volcengine` (coding: `volcengine-plan`) - Auth: `VOLCANO_ENGINE_API_KEY` - Contoh model: `volcengine-plan/ark-code-latest` - CLI: `openclaw onboard --auth-choice volcengine-api-key` @@ -548,13 +550,13 @@ Volcano Engine (火山引擎) menyediakan akses ke Doubao dan model lain di Chin } ``` -Onboarding default-nya menggunakan permukaan coding, tetapi katalog umum `volcengine/*` +Onboarding default ke permukaan coding, tetapi katalog umum `volcengine/*` didaftarkan pada saat yang sama. -Dalam pemilih model onboarding/konfigurasi, pilihan auth Volcengine memprioritaskan -baris `volcengine/*` dan `volcengine-plan/*`. Jika model tersebut belum dimuat, -OpenClaw fallback ke katalog tanpa filter alih-alih menampilkan pemilih -bercakupan provider yang kosong. +Dalam pemilih model onboarding/konfigurasi, pilihan auth Volcengine lebih mengutamakan kedua +baris `volcengine/*` dan `volcengine-plan/*`. Jika model-model itu belum dimuat, +OpenClaw kembali ke katalog yang tidak difilter alih-alih menampilkan pemilih +bercakupan penyedia yang kosong. Model yang tersedia: @@ -576,7 +578,7 @@ Model coding (`volcengine-plan`): BytePlus ARK menyediakan akses ke model yang sama seperti Volcano Engine untuk pengguna internasional. -- Provider: `byteplus` (coding: `byteplus-plan`) +- Penyedia: `byteplus` (coding: `byteplus-plan`) - Auth: `BYTEPLUS_API_KEY` - Contoh model: `byteplus-plan/ark-code-latest` - CLI: `openclaw onboard --auth-choice byteplus-api-key` @@ -589,13 +591,13 @@ BytePlus ARK menyediakan akses ke model yang sama seperti Volcano Engine untuk p } ``` -Onboarding default-nya menggunakan permukaan coding, tetapi katalog umum `byteplus/*` +Onboarding default ke permukaan coding, tetapi katalog umum `byteplus/*` didaftarkan pada saat yang sama. -Dalam pemilih model onboarding/konfigurasi, pilihan auth BytePlus memprioritaskan -baris `byteplus/*` dan `byteplus-plan/*`. Jika model tersebut belum dimuat, -OpenClaw fallback ke katalog tanpa filter alih-alih menampilkan pemilih -bercakupan provider yang kosong. +Dalam pemilih model onboarding/konfigurasi, pilihan auth BytePlus lebih mengutamakan kedua +baris `byteplus/*` dan `byteplus-plan/*`. Jika model-model itu belum dimuat, +OpenClaw kembali ke katalog yang tidak difilter alih-alih menampilkan pemilih +bercakupan penyedia yang kosong. Model yang tersedia: @@ -613,9 +615,9 @@ Model coding (`byteplus-plan`): ### Synthetic -Synthetic menyediakan model kompatibel Anthropic di balik provider `synthetic`: +Synthetic menyediakan model yang kompatibel dengan Anthropic di balik penyedia `synthetic`: -- Provider: `synthetic` +- Penyedia: `synthetic` - Auth: `SYNTHETIC_API_KEY` - Contoh model: `synthetic/hf:MiniMaxAI/MiniMax-M2.5` - CLI: `openclaw onboard --auth-choice synthetic-api-key` @@ -643,37 +645,37 @@ Synthetic menyediakan model kompatibel Anthropic di balik provider `synthetic`: MiniMax dikonfigurasi melalui `models.providers` karena menggunakan endpoint kustom: -- OAuth MiniMax (Global): `--auth-choice minimax-global-oauth` -- OAuth MiniMax (CN): `--auth-choice minimax-cn-oauth` +- MiniMax OAuth (Global): `--auth-choice minimax-global-oauth` +- MiniMax OAuth (CN): `--auth-choice minimax-cn-oauth` - API key MiniMax (Global): `--auth-choice minimax-global-api` - API key MiniMax (CN): `--auth-choice minimax-cn-api` - Auth: `MINIMAX_API_KEY` untuk `minimax`; `MINIMAX_OAUTH_TOKEN` atau `MINIMAX_API_KEY` untuk `minimax-portal` -Lihat [/providers/minimax](/id/providers/minimax) untuk detail penyiapan, opsi model, dan cuplikan konfigurasi. +Lihat [/providers/minimax](/id/providers/minimax) untuk detail penyiapan, opsi model, dan snippet konfigurasi. -Pada jalur streaming kompatibel Anthropic MiniMax, OpenClaw menonaktifkan thinking -secara default kecuali Anda menetapkannya secara eksplisit, dan `/fast on` menulis ulang +Pada jalur streaming MiniMax yang kompatibel dengan Anthropic, OpenClaw menonaktifkan thinking secara +default kecuali Anda menetapkannya secara eksplisit, dan `/fast on` menulis ulang `MiniMax-M2.7` menjadi `MiniMax-M2.7-highspeed`. Pemisahan capability milik plugin: - Default teks/chat tetap pada `minimax/MiniMax-M2.7` -- Generasi gambar adalah `minimax/image-01` atau `minimax-portal/image-01` +- Pembuatan gambar adalah `minimax/image-01` atau `minimax-portal/image-01` - Pemahaman gambar adalah `MiniMax-VL-01` milik plugin pada kedua jalur auth MiniMax -- Pencarian web tetap pada id provider `minimax` +- Web search tetap pada id penyedia `minimax` ### Ollama -Ollama dikirim sebagai plugin provider terbundel dan menggunakan API native Ollama: +Ollama dikirim sebagai plugin penyedia bundel dan menggunakan API native Ollama: -- Provider: `ollama` +- Penyedia: `ollama` - Auth: Tidak diperlukan (server lokal) - Contoh model: `ollama/llama3.3` - Instalasi: [https://ollama.com/download](https://ollama.com/download) ```bash -# Instal Ollama, lalu tarik sebuah model: +# Install Ollama, then pull a model: ollama pull llama3.3 ``` @@ -685,27 +687,26 @@ ollama pull llama3.3 } ``` -Ollama terdeteksi secara lokal di `http://127.0.0.1:11434` saat Anda ikut serta dengan -`OLLAMA_API_KEY`, dan plugin provider terbundel menambahkan Ollama langsung ke +Ollama terdeteksi secara lokal di `http://127.0.0.1:11434` ketika Anda memilih ikut serta dengan +`OLLAMA_API_KEY`, dan plugin penyedia bundel menambahkan Ollama langsung ke `openclaw onboard` dan pemilih model. Lihat [/providers/ollama](/id/providers/ollama) untuk onboarding, mode cloud/lokal, dan konfigurasi kustom. ### vLLM -vLLM dikirim sebagai plugin provider terbundel untuk server -kompatibel OpenAI lokal/self-hosted: +vLLM dikirim sebagai plugin penyedia bundel untuk server OpenAI-compatible lokal/self-hosted: -- Provider: `vllm` +- Penyedia: `vllm` - Auth: Opsional (tergantung server Anda) - Base URL default: `http://127.0.0.1:8000/v1` -Untuk ikut serta dalam auto-discovery secara lokal (nilai apa pun berfungsi jika server Anda tidak menerapkan auth): +Untuk ikut serta dalam auto-discovery secara lokal (nilai apa pun bisa digunakan jika server Anda tidak memaksa auth): ```bash export VLLM_API_KEY="vllm-local" ``` -Lalu tetapkan model (ganti dengan salah satu ID yang dikembalikan oleh `/v1/models`): +Lalu tetapkan model (ganti dengan salah satu id yang dikembalikan oleh `/v1/models`): ```json5 { @@ -715,25 +716,25 @@ Lalu tetapkan model (ganti dengan salah satu ID yang dikembalikan oleh `/v1/mode } ``` -Lihat [/providers/vllm](/id/providers/vllm) untuk detailnya. +Lihat [/providers/vllm](/id/providers/vllm) untuk detail. ### SGLang -SGLang dikirim sebagai plugin provider terbundel untuk server -kompatibel OpenAI self-hosted yang cepat: +SGLang dikirim sebagai plugin penyedia bundel untuk server +OpenAI-compatible self-hosted yang cepat: -- Provider: `sglang` +- Penyedia: `sglang` - Auth: Opsional (tergantung server Anda) - Base URL default: `http://127.0.0.1:30000/v1` -Untuk ikut serta dalam auto-discovery secara lokal (nilai apa pun berfungsi jika server Anda tidak -menerapkan auth): +Untuk ikut serta dalam auto-discovery secara lokal (nilai apa pun bisa digunakan jika server Anda tidak +memaksa auth): ```bash export SGLANG_API_KEY="sglang-local" ``` -Lalu tetapkan model (ganti dengan salah satu ID yang dikembalikan oleh `/v1/models`): +Lalu tetapkan model (ganti dengan salah satu id yang dikembalikan oleh `/v1/models`): ```json5 { @@ -743,7 +744,7 @@ Lalu tetapkan model (ganti dengan salah satu ID yang dikembalikan oleh `/v1/mode } ``` -Lihat [/providers/sglang](/id/providers/sglang) untuk detailnya. +Lihat [/providers/sglang](/id/providers/sglang) untuk detail. ### Proxy lokal (LM Studio, vLLM, LiteLLM, dll.) @@ -782,16 +783,19 @@ Contoh (kompatibel OpenAI): Catatan: -- Untuk provider kustom, `reasoning`, `input`, `cost`, `contextWindow`, dan `maxTokens` bersifat opsional. - Jika dihilangkan, OpenClaw menggunakan default: +- Untuk penyedia kustom, `reasoning`, `input`, `cost`, `contextWindow`, dan `maxTokens` bersifat opsional. + Jika dihilangkan, default OpenClaw adalah: - `reasoning: false` - `input: ["text"]` - `cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }` - `contextWindow: 200000` - `maxTokens: 8192` -- Rekomendasi: tetapkan nilai eksplisit yang sesuai dengan batas proxy/model Anda. -- Untuk `api: "openai-completions"` pada endpoint non-native (setiap `baseUrl` tidak kosong yang host-nya bukan `api.openai.com`), OpenClaw memaksa `compat.supportsDeveloperRole: false` untuk menghindari error provider 400 untuk role `developer` yang tidak didukung. -- Rute kompatibel OpenAI bergaya proxy juga melewati pembentukan request khusus OpenAI native: tidak ada `service_tier`, tidak ada Responses `store`, tidak ada petunjuk prompt-cache, tidak ada pembentukan payload kompatibilitas reasoning OpenAI, dan tidak ada header atribusi OpenClaw tersembunyi. +- Disarankan: tetapkan nilai eksplisit yang sesuai dengan batas proxy/model Anda. +- Untuk `api: "openai-completions"` pada endpoint non-native (setiap `baseUrl` tidak kosong yang host-nya bukan `api.openai.com`), OpenClaw memaksa `compat.supportsDeveloperRole: false` untuk menghindari error 400 penyedia untuk role `developer` yang tidak didukung. +- Rute kompatibel OpenAI bergaya proxy juga melewati pembentukan permintaan native khusus OpenAI: + tidak ada `service_tier`, tidak ada Responses `store`, tidak ada petunjuk prompt-cache, tidak ada + pembentukan payload kompatibilitas reasoning OpenAI, dan tidak ada header atribusi OpenClaw + tersembunyi. - Jika `baseUrl` kosong/dihilangkan, OpenClaw mempertahankan perilaku default OpenAI (yang diselesaikan ke `api.openai.com`). - Demi keamanan, `compat.supportsDeveloperRole: true` yang eksplisit tetap ditimpa pada endpoint `openai-completions` non-native. @@ -808,6 +812,6 @@ Lihat juga: [/gateway/configuration](/id/gateway/configuration) untuk contoh kon ## Terkait - [Models](/id/concepts/models) — konfigurasi model dan alias -- [Model Failover](/id/concepts/model-failover) — rantai fallback dan perilaku retry -- [Configuration Reference](/id/gateway/configuration-reference#agent-defaults) — key konfigurasi model +- [Model Failover](/id/concepts/model-failover) — rantai fallback dan perilaku percobaan ulang +- [Configuration Reference](/id/gateway/configuration-reference#agent-defaults) — kunci konfigurasi model - [Providers](/id/providers) — panduan penyiapan per penyedia diff --git a/docs/id/concepts/qa-e2e-automation.md b/docs/id/concepts/qa-e2e-automation.md index 9973b3c4b..9b541b9e2 100644 --- a/docs/id/concepts/qa-e2e-automation.md +++ b/docs/id/concepts/qa-e2e-automation.md @@ -2,14 +2,14 @@ read_when: - Memperluas qa-lab atau qa-channel - Menambahkan skenario QA yang didukung repo - - Membangun otomasi QA dengan realisme lebih tinggi di sekitar dashboard Gateway -summary: Bentuk otomasi QA privat untuk qa-lab, qa-channel, skenario seed, dan laporan protokol + - Membangun otomasi QA dengan realisme lebih tinggi di sekitar Dashboard Gateway +summary: Bentuk otomasi QA privat untuk qa-lab, qa-channel, skenario seeded, dan laporan protokol title: Otomasi E2E QA x-i18n: - generated_at: "2026-04-08T02:14:02Z" + generated_at: "2026-04-08T06:00:49Z" model: gpt-5.4 provider: openai - source_hash: 3b4aa5acc8e77303f4045d4f04372494cae21b89d2fdaba856dbb4855ced9d27 + source_hash: 57da147dc06abf9620290104e01a83b42182db1806514114fd9e8467492cda99 source_path: concepts/qa-e2e-automation.md workflow: 15 --- @@ -17,7 +17,7 @@ x-i18n: # Otomasi E2E QA Stack QA privat dimaksudkan untuk menguji OpenClaw dengan cara yang lebih realistis -dan menyerupai channel dibandingkan yang dapat dicakup oleh satu unit test. +dan menyerupai channel dibandingkan yang dapat dilakukan oleh satu unit test. Komponen saat ini: @@ -30,7 +30,7 @@ Komponen saat ini: Alur operator QA saat ini adalah situs QA dua panel: -- Kiri: dashboard Gateway (Control UI) dengan agen. +- Kiri: Dashboard Gateway (Control UI) dengan agen. - Kanan: QA Lab, menampilkan transkrip bergaya Slack dan rencana skenario. Jalankan dengan: @@ -39,9 +39,9 @@ Jalankan dengan: pnpm qa:lab:up ``` -Perintah itu membangun situs QA, memulai lane gateway berbasis Docker, dan menampilkan -halaman QA Lab tempat operator atau loop otomasi dapat memberikan misi QA -kepada agen, mengamati perilaku channel nyata, serta mencatat apa yang berhasil, gagal, atau +Itu membangun situs QA, memulai lane gateway berbasis Docker, dan mengekspos +halaman QA Lab tempat operator atau loop otomasi dapat memberi agen misi QA, +mengamati perilaku channel 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, @@ -54,27 +54,28 @@ pnpm qa:lab:up:fast pnpm qa:lab:watch ``` -`qa:lab:up:fast` mempertahankan layanan Docker pada image yang sudah dibangun sebelumnya dan melakukan bind-mount +`qa:lab:up:fast` menjaga layanan Docker tetap berjalan pada image yang sudah dibangun sebelumnya dan me-bind-mount `extensions/qa-lab/web/dist` ke dalam container `qa-lab`. `qa:lab:watch` -membangun ulang bundle tersebut saat ada perubahan, dan browser melakukan muat ulang otomatis ketika hash aset QA Lab berubah. +membangun ulang bundle tersebut saat ada perubahan, dan browser memuat ulang otomatis ketika hash aset QA Lab berubah. ## Seed yang didukung repo Aset seed berada di `qa/`: -- `qa/scenarios.md` +- `qa/scenarios/index.md` +- `qa/scenarios/*.md` -Aset ini sengaja disimpan di git agar rencana QA terlihat baik oleh manusia maupun -agen. Daftar dasarnya harus tetap cukup luas untuk mencakup: +Ini sengaja disimpan di git agar rencana QA terlihat oleh manusia maupun +agen. Daftar dasar harus tetap cukup luas untuk mencakup: - obrolan DM dan channel - perilaku thread - siklus hidup aksi pesan - callback cron - pemanggilan memori -- peralihan model +- pergantian model - handoff subagen -- membaca repo dan membaca dokumentasi +- membaca repo dan membaca dokumen - satu tugas build kecil seperti Lobster Invaders ## Pelaporan @@ -87,7 +88,7 @@ Laporan tersebut harus menjawab: - Apa yang tetap terblokir - Skenario tindak lanjut apa yang layak ditambahkan -## Dokumentasi terkait +## Dokumen terkait - [Testing](/id/help/testing) - [QA Channel](/id/channels/qa-channel) diff --git a/docs/id/concepts/streaming.md b/docs/id/concepts/streaming.md index 17d3879db..a0c1d56dc 100644 --- a/docs/id/concepts/streaming.md +++ b/docs/id/concepts/streaming.md @@ -1,15 +1,15 @@ --- read_when: - - Menjelaskan cara kerja streaming atau chunking di channel - - Mengubah perilaku block streaming atau channel chunking - - Men-debug balasan blok yang duplikat/terlalu awal atau preview streaming channel -summary: Perilaku streaming + chunking (balasan blok, preview streaming channel, pemetaan mode) + - Menjelaskan cara kerja streaming atau chunking pada kanal + - Mengubah perilaku streaming blok atau chunking kanal + - Men-debug balasan blok duplikat/terlalu awal atau streaming pratinjau kanal +summary: Perilaku streaming + chunking (balasan blok, streaming pratinjau kanal, pemetaan mode) title: Streaming dan Chunking x-i18n: - generated_at: "2026-04-05T13:52:34Z" + generated_at: "2026-04-08T06:01:04Z" model: gpt-5.4 provider: openai - source_hash: 44b0d08c7eafcb32030ef7c8d5719c2ea2d34e4bac5fdad8cc8b3f4e9e9fad97 + source_hash: a8e847bb7da890818cd79dec7777f6ae488e6d6c0468e948e56b6b6c598e0000 source_path: concepts/streaming.md workflow: 15 --- @@ -18,14 +18,14 @@ x-i18n: OpenClaw memiliki dua lapisan streaming yang terpisah: -- **Block streaming (channel):** mengirim **blok** yang sudah selesai saat asisten menulis. Ini adalah pesan channel biasa (bukan delta token). -- **Preview streaming (Telegram/Discord/Slack):** memperbarui **pesan preview** sementara selama proses pembuatan. +- **Streaming blok (kanal):** mengirim **blok** yang sudah selesai saat asisten menulis. Ini adalah pesan kanal biasa (bukan delta token). +- **Streaming pratinjau (Telegram/Discord/Slack):** memperbarui **pesan pratinjau** sementara selama pembuatan. -Saat ini **tidak ada true token-delta streaming** ke pesan channel. Preview streaming berbasis pesan (kirim + edit/tambahkan). +Saat ini **tidak ada streaming delta-token yang sebenarnya** ke pesan kanal. Streaming pratinjau berbasis pesan (kirim + edit/tambahkan). -## Block streaming (pesan channel) +## Streaming blok (pesan kanal) -Block streaming mengirim output asisten dalam potongan besar saat tersedia. +Streaming blok mengirim keluaran asisten dalam potongan kasar saat tersedia. ``` Model output @@ -39,130 +39,131 @@ Model output Legenda: -- `text_delta/events`: event stream model (bisa jarang untuk model non-streaming). -- `chunker`: `EmbeddedBlockChunker` yang menerapkan batas min/maks + preferensi pemisahan. -- `channel send`: pesan keluar yang sebenarnya (balasan blok). +- `text_delta/events`: peristiwa stream model (bisa jarang untuk model non-streaming). +- `chunker`: `EmbeddedBlockChunker` yang menerapkan batas minimum/maksimum + preferensi pemisahan. +- `channel send`: pesan keluar aktual (balasan blok). **Kontrol:** -- `agents.defaults.blockStreamingDefault`: `"on"`/`"off"` (default off). -- Override channel: `*.blockStreaming` (dan varian per akun) untuk memaksa `"on"`/`"off"` per channel. +- `agents.defaults.blockStreamingDefault`: `"on"`/`"off"` (default mati). +- Override kanal: `*.blockStreaming` (dan varian per akun) untuk memaksa `"on"`/`"off"` per kanal. - `agents.defaults.blockStreamingBreak`: `"text_end"` atau `"message_end"`. - `agents.defaults.blockStreamingChunk`: `{ minChars, maxChars, breakPreference? }`. -- `agents.defaults.blockStreamingCoalesce`: `{ minChars?, maxChars?, idleMs? }` (gabungkan blok yang di-stream sebelum dikirim). -- Hard cap channel: `*.textChunkLimit` (misalnya, `channels.whatsapp.textChunkLimit`). -- Mode chunk channel: `*.chunkMode` (`length` sebagai default, `newline` memisahkan pada baris kosong (batas paragraf) sebelum chunking berdasarkan panjang). -- Soft cap Discord: `channels.discord.maxLinesPerMessage` (default 17) memisahkan balasan yang tinggi untuk menghindari pemotongan UI. +- `agents.defaults.blockStreamingCoalesce`: `{ minChars?, maxChars?, idleMs? }` (menggabungkan blok yang di-stream sebelum dikirim). +- Batas keras kanal: `*.textChunkLimit` (misalnya, `channels.whatsapp.textChunkLimit`). +- Mode chunk kanal: `*.chunkMode` (`length` default, `newline` membagi pada baris kosong (batas paragraf) sebelum chunking berdasarkan panjang). +- Batas lunak Discord: `channels.discord.maxLinesPerMessage` (default 17) membagi balasan tinggi untuk menghindari pemotongan UI. **Semantik batas:** - `text_end`: stream blok segera setelah chunker mengeluarkan hasil; flush pada setiap `text_end`. -- `message_end`: tunggu hingga pesan asisten selesai, lalu flush output yang dibuffer. +- `message_end`: tunggu sampai pesan asisten selesai, lalu flush keluaran yang dibuffer. -`message_end` tetap menggunakan chunker jika teks dalam buffer melebihi `maxChars`, sehingga bisa mengeluarkan beberapa chunk di akhir. +`message_end` tetap menggunakan chunker jika teks yang dibuffer melebihi `maxChars`, sehingga dapat mengeluarkan beberapa chunk di akhir. -## Algoritma chunking (batas rendah/tinggi) +## Algoritma chunking (batas bawah/atas) -Block chunking diimplementasikan oleh `EmbeddedBlockChunker`: +Chunking blok diimplementasikan oleh `EmbeddedBlockChunker`: -- **Batas rendah:** jangan emit sampai buffer >= `minChars` (kecuali dipaksa). -- **Batas tinggi:** prioritaskan pemisahan sebelum `maxChars`; jika dipaksa, pisahkan di `maxChars`. -- **Preferensi pemisahan:** `paragraph` → `newline` → `sentence` → `whitespace` → hard break. -- **Code fence:** jangan pernah memisahkan di dalam fence; ketika dipaksa di `maxChars`, tutup + buka kembali fence agar Markdown tetap valid. +- **Batas bawah:** jangan keluarkan hasil sampai buffer >= `minChars` (kecuali dipaksa). +- **Batas atas:** utamakan pemisahan sebelum `maxChars`; jika dipaksa, pisahkan pada `maxChars`. +- **Preferensi pemisahan:** `paragraph` → `newline` → `sentence` → `whitespace` → pemisahan keras. +- **Code fence:** jangan pernah membagi di dalam fence; saat dipaksa pada `maxChars`, tutup + buka kembali fence agar Markdown tetap valid. -`maxChars` dijepit ke `textChunkLimit` channel, sehingga Anda tidak bisa melebihi batas per channel. +`maxChars` dibatasi ke `textChunkLimit` kanal, jadi Anda tidak bisa melebihi batas per kanal. ## Coalescing (menggabungkan blok yang di-stream) -Saat block streaming diaktifkan, OpenClaw dapat **menggabungkan block chunk yang berurutan** -sebelum mengirimkannya. Ini mengurangi “spam satu baris” sambil tetap memberikan -output progresif. +Saat streaming blok diaktifkan, OpenClaw dapat **menggabungkan chunk blok berturut-turut** +sebelum mengirimkannya. Ini mengurangi “spam satu baris” sambil tetap menyediakan +keluaran progresif. - Coalescing menunggu **jeda idle** (`idleMs`) sebelum flush. -- Buffer dibatasi oleh `maxChars` dan akan flush jika melebihinya. -- `minChars` mencegah fragmen kecil dikirim sampai cukup banyak teks yang terkumpul - (flush akhir selalu mengirim sisa teks). +- Buffer dibatasi oleh `maxChars` dan akan flush jika melampauinya. +- `minChars` mencegah fragmen kecil terkirim sampai cukup banyak teks terkumpul + (flush akhir selalu mengirim teks yang tersisa). - Joiner diturunkan dari `blockStreamingChunk.breakPreference` (`paragraph` → `\n\n`, `newline` → `\n`, `sentence` → spasi). -- Override channel tersedia melalui `*.blockStreamingCoalesce` (termasuk konfigurasi per akun). +- Override kanal tersedia melalui `*.blockStreamingCoalesce` (termasuk konfigurasi per akun). - Default coalesce `minChars` dinaikkan menjadi 1500 untuk Signal/Slack/Discord kecuali dioverride. -## Tempo seperti manusia di antara blok +## Tempo seperti manusia antarblok -Saat block streaming diaktifkan, Anda dapat menambahkan **jeda acak** di antara -balasan blok (setelah blok pertama). Ini membuat respons multi-bubble terasa +Saat streaming blok diaktifkan, Anda dapat menambahkan **jeda acak** di antara +balasan blok (setelah blok pertama). Ini membuat respons multi-gelembung terasa lebih alami. -- Konfigurasi: `agents.defaults.humanDelay` (override per agen melalui `agents.list[].humanDelay`). +- Config: `agents.defaults.humanDelay` (override per agen melalui `agents.list[].humanDelay`). - Mode: `off` (default), `natural` (800–2500ms), `custom` (`minMs`/`maxMs`). - Hanya berlaku untuk **balasan blok**, bukan balasan akhir atau ringkasan tool. -## "Stream chunks or everything" +## "Stream chunk atau semuanya" Ini dipetakan ke: -- **Stream chunks:** `blockStreamingDefault: "on"` + `blockStreamingBreak: "text_end"` (emit sambil berjalan). Channel non-Telegram juga memerlukan `*.blockStreaming: true`. -- **Stream everything at end:** `blockStreamingBreak: "message_end"` (flush sekali, mungkin beberapa chunk jika sangat panjang). -- **No block streaming:** `blockStreamingDefault: "off"` (hanya balasan akhir). +- **Stream chunk:** `blockStreamingDefault: "on"` + `blockStreamingBreak: "text_end"` (kirim saat berjalan). Kanal non-Telegram juga memerlukan `*.blockStreaming: true`. +- **Stream semuanya di akhir:** `blockStreamingBreak: "message_end"` (flush sekali, mungkin beberapa chunk jika sangat panjang). +- **Tanpa streaming blok:** `blockStreamingDefault: "off"` (hanya balasan akhir). -**Catatan channel:** Block streaming **nonaktif kecuali** -`*.blockStreaming` secara eksplisit disetel ke `true`. Channel dapat men-stream preview langsung +**Catatan kanal:** Streaming blok **mati kecuali** +`*.blockStreaming` secara eksplisit disetel ke `true`. Kanal dapat menayangkan pratinjau langsung (`channels..streaming`) tanpa balasan blok. -Pengingat lokasi konfigurasi: default `blockStreaming*` berada di bawah -`agents.defaults`, bukan konfigurasi root. +Pengingat lokasi config: default `blockStreaming*` berada di bawah +`agents.defaults`, bukan config root. -## Mode preview streaming +## Mode streaming pratinjau Kunci kanonis: `channels..streaming` Mode: -- `off`: nonaktifkan preview streaming. -- `partial`: satu preview yang diganti dengan teks terbaru. -- `block`: preview diperbarui dalam langkah bertahap yang di-chunk/ditambahkan. -- `progress`: preview status/kemajuan selama pembuatan, jawaban akhir saat selesai. +- `off`: nonaktifkan streaming pratinjau. +- `partial`: satu pratinjau yang diganti dengan teks terbaru. +- `block`: pembaruan pratinjau dalam langkah chunked/appended. +- `progress`: pratinjau progres/status selama pembuatan, jawaban akhir saat selesai. -### Pemetaan channel +### Pemetaan kanal -| Channel | `off` | `partial` | `block` | `progress` | -| -------- | ----- | --------- | ------- | ----------------- | +| Kanal | `off` | `partial` | `block` | `progress` | +| -------- | ----- | --------- | ------- | --------------------- | | Telegram | ✅ | ✅ | ✅ | dipetakan ke `partial` | | Discord | ✅ | ✅ | ✅ | dipetakan ke `partial` | -| Slack | ✅ | ✅ | ✅ | ✅ | +| Slack | ✅ | ✅ | ✅ | ✅ | Khusus Slack: -- `channels.slack.nativeStreaming` mengaktifkan/nonaktifkan panggilan API native streaming Slack ketika `streaming=partial` (default: `true`). +- `channels.slack.streaming.nativeTransport` mengaktifkan/nonaktifkan panggilan API streaming native Slack saat `channels.slack.streaming.mode="partial"` (default: `true`). +- Streaming native Slack dan status thread asisten Slack memerlukan target thread balasan; DM level atas tidak menampilkan pratinjau bergaya thread tersebut. Migrasi kunci lama: - Telegram: `streamMode` + boolean `streaming` dimigrasikan otomatis ke enum `streaming`. - Discord: `streamMode` + boolean `streaming` dimigrasikan otomatis ke enum `streaming`. -- Slack: `streamMode` dimigrasikan otomatis ke enum `streaming`; boolean `streaming` dimigrasikan otomatis ke `nativeStreaming`. +- Slack: `streamMode` dimigrasikan otomatis ke `streaming.mode`; boolean `streaming` dimigrasikan otomatis ke `streaming.mode` plus `streaming.nativeTransport`; `nativeStreaming` lama dimigrasikan otomatis ke `streaming.nativeTransport`. ### Perilaku runtime Telegram: -- Menggunakan update preview `sendMessage` + `editMessageText` di DM serta grup/topik. -- Preview streaming dilewati ketika Telegram block streaming diaktifkan secara eksplisit (untuk menghindari streaming ganda). -- `/reasoning stream` dapat menulis reasoning ke preview. +- Menggunakan pembaruan pratinjau `sendMessage` + `editMessageText` di DM dan grup/topik. +- Streaming pratinjau dilewati saat streaming blok Telegram diaktifkan secara eksplisit (untuk menghindari streaming ganda). +- `/reasoning stream` dapat menulis penalaran ke pratinjau. Discord: -- Menggunakan pesan preview send + edit. +- Menggunakan pesan pratinjau kirim + edit. - Mode `block` menggunakan draft chunking (`draftChunk`). -- Preview streaming dilewati ketika Discord block streaming diaktifkan secara eksplisit. +- Streaming pratinjau dilewati saat streaming blok Discord diaktifkan secara eksplisit. Slack: -- `partial` dapat menggunakan API native streaming Slack (`chat.startStream`/`append`/`stop`) jika tersedia. -- `block` menggunakan preview draf bergaya append. -- `progress` menggunakan teks preview status, lalu jawaban akhir. +- `partial` dapat menggunakan streaming native Slack (`chat.startStream`/`append`/`stop`) saat tersedia. +- `block` menggunakan pratinjau draft bergaya append. +- `progress` menggunakan teks pratinjau status, lalu jawaban akhir. ## Terkait -- [Messages](/concepts/messages) — siklus hidup dan pengiriman pesan -- [Retry](/concepts/retry) — perilaku retry saat pengiriman gagal -- [Channels](/id/channels) — dukungan streaming per channel +- [Pesan](/id/concepts/messages) — siklus hidup dan pengiriman pesan +- [Coba lagi](/id/concepts/retry) — perilaku percobaan ulang saat pengiriman gagal +- [Kanal](/id/channels) — dukungan streaming per kanal diff --git a/docs/id/gateway/configuration-reference.md b/docs/id/gateway/configuration-reference.md index f670d7577..be7720b3c 100644 --- a/docs/id/gateway/configuration-reference.md +++ b/docs/id/gateway/configuration-reference.md @@ -1,56 +1,70 @@ --- read_when: - - Anda memerlukan semantik atau nilai default konfigurasi yang tepat hingga tingkat field - - Anda sedang memvalidasi blok konfigurasi channel, model, gateway, atau tool -summary: Referensi lengkap untuk setiap kunci konfigurasi OpenClaw, nilai default, dan pengaturan channel + - Anda memerlukan semantik atau nilai default konfigurasi tingkat bidang yang tepat + - Anda sedang memvalidasi blok konfigurasi channel, 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-04-08T02:20:27Z" + generated_at: "2026-04-08T06:07:00Z" model: gpt-5.4 provider: openai - source_hash: 2c7991b948cbbb7954a3e26280089ab00088e7f4878ec0b0540c3c9acf222ebb + source_hash: 2f9ab34fb56897a77cb038d95bea21e8530d8f0402b66d1ee97c73822a1e8fd4 source_path: gateway/configuration-reference.md workflow: 15 --- # Referensi Konfigurasi -Setiap field yang tersedia di `~/.openclaw/openclaw.json`. Untuk ringkasan berbasis tugas, lihat [Configuration](/id/gateway/configuration). +Referensi konfigurasi inti untuk `~/.openclaw/openclaw.json`. Untuk ikhtisar berbasis tugas, lihat [Konfigurasi](/id/gateway/configuration). -Format config adalah **JSON5** (komentar + koma di akhir diperbolehkan). Semua field bersifat opsional — OpenClaw menggunakan default yang aman saat dihilangkan. +Halaman ini mencakup permukaan konfigurasi utama OpenClaw dan menautkan keluar saat sebuah subsistem memiliki referensi mendalamnya sendiri. Halaman ini **tidak** mencoba menyisipkan setiap katalog perintah milik channel/plugin atau setiap knob memori/QMD mendalam dalam satu halaman. + +Sumber kebenaran kode: + +- `openclaw config schema` mencetak JSON Schema aktif yang digunakan untuk validasi dan Control UI, dengan metadata bundled/plugin/channel digabungkan jika tersedia +- `config.schema.lookup` mengembalikan satu node skema dengan cakupan path untuk alat penelusuran mendalam +- `pnpm config:docs:check` / `pnpm config:docs:gen` memvalidasi hash baseline dokumen konfigurasi terhadap permukaan skema saat ini + +Referensi mendalam khusus: + +- [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` +- [Slash Commands](/id/tools/slash-commands) untuk katalog perintah built-in + bundled saat ini +- halaman channel/plugin pemilik untuk permukaan perintah khusus channel + +Format konfigurasi adalah **JSON5** (komentar + koma di akhir diperbolehkan). Semua bidang bersifat opsional — OpenClaw menggunakan nilai default yang aman saat dihilangkan. --- ## Channel -Setiap channel dimulai secara otomatis saat bagian config-nya ada (kecuali `enabled: false`). +Setiap channel mulai secara otomatis saat bagian konfigurasinya ada (kecuali `enabled: false`). ### Akses DM dan grup Semua channel mendukung kebijakan DM dan kebijakan grup: -| Kebijakan DM | Perilaku | -| ------------------- | --------------------------------------------------------------- | -| `pairing` (default) | Pengirim yang tidak dikenal mendapatkan kode pairing satu kali; pemilik harus menyetujui | -| `allowlist` | Hanya pengirim dalam `allowFrom` (atau penyimpanan izin hasil pairing) | -| `open` | Izinkan semua DM masuk (memerlukan `allowFrom: ["*"]`) | -| `disabled` | Abaikan semua DM masuk | +| Kebijakan DM | Perilaku | +| ------------------- | ------------------------------------------------------------- | +| `pairing` (default) | Pengirim yang tidak dikenal mendapat kode pairing satu kali; owner harus menyetujui | +| `allowlist` | Hanya pengirim di `allowFrom` (atau paired allow store) | +| `open` | Izinkan semua DM masuk (memerlukan `allowFrom: ["*"]`) | +| `disabled` | Abaikan semua DM masuk | -| Kebijakan grup | Perilaku | -| --------------------- | ------------------------------------------------------ | +| Kebijakan grup | Perilaku | +| --------------------- | ------------------------------------------------------- | | `allowlist` (default) | Hanya grup yang cocok dengan allowlist yang dikonfigurasi | -| `open` | Lewati allowlist grup (mention-gating tetap berlaku) | -| `disabled` | Blokir semua pesan grup/room | +| `open` | Lewati allowlist grup (mention-gating tetap berlaku) | +| `disabled` | Blokir semua pesan grup/room | -`channels.defaults.groupPolicy` menetapkan default saat `groupPolicy` milik provider tidak diatur. +`channels.defaults.groupPolicy` menetapkan default saat `groupPolicy` penyedia tidak diatur. Kode pairing kedaluwarsa setelah 1 jam. Permintaan pairing DM yang tertunda dibatasi hingga **3 per channel**. -Jika blok provider hilang sepenuhnya (`channels.` tidak ada), kebijakan grup runtime kembali ke `allowlist` (fail-closed) dengan peringatan saat startup. +Jika blok penyedia tidak ada sama sekali (`channels.` tidak ada), kebijakan grup runtime kembali ke `allowlist` (fail-closed) dengan peringatan saat startup. ### Override model channel -Gunakan `channels.modelByChannel` untuk menetapkan ID channel tertentu ke model tertentu. Nilai menerima `provider/model` atau alias model yang sudah dikonfigurasi. Pemetaan channel diterapkan saat sebuah session belum memiliki override model (misalnya, diatur lewat `/model`). +Gunakan `channels.modelByChannel` untuk menetapkan ID channel tertentu ke sebuah model. Nilai menerima `provider/model` atau alias model yang dikonfigurasi. Pemetaan channel berlaku saat sebuah sesi belum memiliki override model (misalnya, diatur melalui `/model`). ```json5 { @@ -73,7 +87,7 @@ Gunakan `channels.modelByChannel` untuk menetapkan ID channel tertentu ke model ### Default channel dan heartbeat -Gunakan `channels.defaults` untuk perilaku kebijakan grup dan heartbeat bersama di seluruh provider: +Gunakan `channels.defaults` untuk perilaku kebijakan grup dan heartbeat bersama di seluruh penyedia: ```json5 { @@ -91,15 +105,15 @@ Gunakan `channels.defaults` untuk perilaku kebijakan grup dan heartbeat bersama } ``` -- `channels.defaults.groupPolicy`: kebijakan grup cadangan saat `groupPolicy` tingkat provider tidak diatur. -- `channels.defaults.contextVisibility`: mode visibilitas konteks tambahan default untuk semua channel. Nilai: `all` (default, sertakan semua konteks kutipan/thread/riwayat), `allowlist` (hanya sertakan konteks dari pengirim yang ada di allowlist), `allowlist_quote` (sama seperti allowlist tetapi pertahankan konteks kutipan/balasan eksplisit). Override per-channel: `channels..contextVisibility`. -- `channels.defaults.heartbeat.showOk`: sertakan status channel yang sehat dalam output heartbeat. +- `channels.defaults.groupPolicy`: kebijakan grup fallback saat `groupPolicy` tingkat penyedia tidak diatur. +- `channels.defaults.contextVisibility`: mode visibilitas konteks tambahan default untuk semua channel. Nilai: `all` (default, sertakan semua konteks kutipan/thread/riwayat), `allowlist` (hanya sertakan konteks dari pengirim yang ada di allowlist), `allowlist_quote` (sama seperti allowlist tetapi tetap mempertahankan konteks kutipan/balasan eksplisit). Override per channel: `channels..contextVisibility`. +- `channels.defaults.heartbeat.showOk`: sertakan status channel sehat dalam output heartbeat. - `channels.defaults.heartbeat.showAlerts`: sertakan status menurun/error dalam output heartbeat. - `channels.defaults.heartbeat.useIndicator`: render output heartbeat bergaya indikator yang ringkas. ### WhatsApp -WhatsApp berjalan melalui channel web gateway (Baileys Web). Ini dimulai secara otomatis saat session yang terhubung sudah ada. +WhatsApp berjalan melalui channel web gateway (Baileys Web). Channel ini mulai secara otomatis saat ada sesi yang tertaut. ```json5 { @@ -110,7 +124,7 @@ WhatsApp berjalan melalui channel web gateway (Baileys Web). Ini dimulai secara textChunkLimit: 4000, chunkMode: "length", // length | newline mediaMaxMb: 50, - sendReadReceipts: true, // centang biru (false dalam mode self-chat) + sendReadReceipts: true, // blue ticks (false in self-chat mode) groups: { "*": { requireMention: true }, }, @@ -150,10 +164,10 @@ WhatsApp berjalan melalui channel web gateway (Baileys Web). Ini dimulai secara } ``` -- Perintah keluar default menggunakan akun `default` jika ada; jika tidak, gunakan id akun pertama yang dikonfigurasi (diurutkan). -- `channels.whatsapp.defaultAccount` opsional meng-override pemilihan akun default cadangan itu saat cocok dengan id akun yang dikonfigurasi. +- Perintah keluar default ke akun `default` jika ada; jika tidak, ke ID akun terkonfigurasi pertama (diurutkan). +- `channels.whatsapp.defaultAccount` opsional menimpa pemilihan akun default fallback itu jika cocok dengan ID akun yang dikonfigurasi. - Direktori auth Baileys akun tunggal lama dimigrasikan oleh `openclaw doctor` ke `whatsapp/default`. -- Override per-akun: `channels.whatsapp.accounts..sendReadReceipts`, `channels.whatsapp.accounts..dmPolicy`, `channels.whatsapp.accounts..allowFrom`. +- Override per akun: `channels.whatsapp.accounts..sendReadReceipts`, `channels.whatsapp.accounts..dmPolicy`, `channels.whatsapp.accounts..allowFrom`. @@ -188,7 +202,7 @@ WhatsApp berjalan melalui channel web gateway (Baileys Web). Ini dimulai secara historyLimit: 50, replyToMode: "first", // off | first | all | batched linkPreview: true, - streaming: "partial", // off | partial | block | progress (default: off; ikut serta secara eksplisit untuk menghindari batas laju preview-edit) + streaming: "partial", // off | partial | block | progress (default: off; opt in explicitly to avoid preview-edit rate limits) actions: { reactions: true, sendMessage: true }, reactionNotifications: "own", // off | own | all mediaMaxMb: 100, @@ -212,12 +226,12 @@ WhatsApp berjalan melalui channel web gateway (Baileys Web). Ini dimulai secara ``` - Token bot: `channels.telegram.botToken` atau `channels.telegram.tokenFile` (hanya file biasa; symlink ditolak), dengan `TELEGRAM_BOT_TOKEN` sebagai fallback untuk akun default. -- `channels.telegram.defaultAccount` opsional meng-override pemilihan akun default saat cocok dengan id akun yang dikonfigurasi. -- Dalam pengaturan multi-akun (2+ id akun), set default eksplisit (`channels.telegram.defaultAccount` atau `channels.telegram.accounts.default`) untuk menghindari routing fallback; `openclaw doctor` memberi peringatan saat ini hilang atau tidak valid. -- `configWrites: false` memblokir penulisan config yang dipicu Telegram (migrasi ID supergroup, `/config set|unset`). -- Entri `bindings[]` tingkat atas dengan `type: "acp"` mengonfigurasi binding ACP persisten untuk topik forum (gunakan `chatId:topic:topicId` kanonis di `match.peer.id`). Semantik field dibagikan di [ACP Agents](/id/tools/acp-agents#channel-specific-settings). -- Preview stream Telegram menggunakan `sendMessage` + `editMessageText` (berfungsi di chat direct maupun grup). -- Kebijakan retry: lihat [Retry policy](/id/concepts/retry). +- `channels.telegram.defaultAccount` opsional menimpa pemilihan akun default saat cocok dengan ID akun yang dikonfigurasi. +- Dalam pengaturan multi-akun (2+ ID akun), tetapkan default eksplisit (`channels.telegram.defaultAccount` atau `channels.telegram.accounts.default`) untuk menghindari perutean fallback; `openclaw doctor` memberi peringatan saat ini tidak ada atau tidak valid. +- `configWrites: false` memblokir penulisan konfigurasi yang dimulai dari Telegram (migrasi ID supergroup, `/config set|unset`). +- Entri `bindings[]` tingkat atas dengan `type: "acp"` mengonfigurasi binding ACP persisten untuk topik forum (gunakan `chatId:topic:topicId` kanonis dalam `match.peer.id`). Semantik bidang dibagikan di [ACP Agents](/id/tools/acp-agents#channel-specific-settings). +- Pratinjau stream Telegram menggunakan `sendMessage` + `editMessageText` (berfungsi di chat langsung dan grup). +- Kebijakan retry: lihat [Kebijakan retry](/id/concepts/retry). ### Discord @@ -272,7 +286,7 @@ WhatsApp berjalan melalui channel web gateway (Baileys Web). Ini dimulai secara historyLimit: 20, textChunkLimit: 2000, chunkMode: "length", // length | newline - streaming: "off", // off | partial | block | progress (progress dipetakan ke partial di Discord) + streaming: "off", // off | partial | block | progress (progress maps to partial on Discord) maxLinesPerMessage: 17, ui: { components: { @@ -283,7 +297,7 @@ WhatsApp berjalan melalui channel web gateway (Baileys Web). Ini dimulai secara enabled: true, idleHours: 24, maxAgeHours: 0, - spawnSubagentSessions: false, // opt-in untuk sessions_spawn({ thread: true }) + spawnSubagentSessions: false, // opt-in for sessions_spawn({ thread: true }) }, voice: { enabled: true, @@ -320,33 +334,33 @@ WhatsApp berjalan melalui channel web gateway (Baileys Web). Ini dimulai secara ``` - Token: `channels.discord.token`, dengan `DISCORD_BOT_TOKEN` sebagai fallback untuk akun default. -- Panggilan keluar langsung yang menyediakan `token` Discord eksplisit menggunakan token itu untuk panggilan; pengaturan retry/kebijakan akun tetap berasal dari akun yang dipilih pada snapshot runtime aktif. -- `channels.discord.defaultAccount` opsional meng-override pemilihan akun default saat cocok dengan id akun yang dikonfigurasi. +- Panggilan keluar langsung yang menyediakan `token` Discord eksplisit menggunakan token itu untuk panggilan tersebut; pengaturan retry/kebijakan akun tetap berasal dari akun yang dipilih dalam snapshot runtime aktif. +- `channels.discord.defaultAccount` opsional menimpa pemilihan akun default saat cocok dengan ID akun yang dikonfigurasi. - Gunakan `user:` (DM) atau `channel:` (channel guild) untuk target pengiriman; ID numerik polos ditolak. -- Slug guild menggunakan huruf kecil dengan spasi diganti `-`; kunci channel menggunakan nama yang sudah di-slug (tanpa `#`). Lebih disarankan menggunakan ID guild. -- Pesan yang ditulis bot diabaikan secara default. `allowBots: true` mengaktifkannya; gunakan `allowBots: "mentions"` agar hanya menerima pesan bot yang menyebut bot (pesan sendiri tetap difilter). -- `channels.discord.guilds..ignoreOtherMentions` (dan override channel) membuang pesan yang menyebut pengguna atau role lain tetapi tidak menyebut bot (tidak termasuk @everyone/@here). -- `maxLinesPerMessage` (default 17) memecah pesan yang tinggi meskipun kurang dari 2000 karakter. -- `channels.discord.threadBindings` mengontrol routing yang terikat thread Discord: - - `enabled`: override Discord untuk fitur session terikat thread (`/focus`, `/unfocus`, `/agents`, `/session idle`, `/session max-age`, dan pengiriman/routing terikat) +- Slug guild menggunakan huruf kecil dengan spasi diganti `-`; kunci channel menggunakan nama yang sudah di-slug (tanpa `#`). Sebaiknya gunakan ID guild. +- Pesan yang ditulis bot diabaikan secara default. `allowBots: true` mengizinkannya; gunakan `allowBots: "mentions"` untuk hanya menerima pesan bot yang menyebut bot (pesan sendiri tetap difilter). +- `channels.discord.guilds..ignoreOtherMentions` (dan override channel) membuang pesan yang menyebut pengguna atau role lain tetapi bukan bot (tidak termasuk @everyone/@here). +- `maxLinesPerMessage` (default 17) membagi pesan yang tinggi bahkan saat di bawah 2000 karakter. +- `channels.discord.threadBindings` mengontrol perutean terikat thread Discord: + - `enabled`: override Discord untuk fitur sesi terikat thread (`/focus`, `/unfocus`, `/agents`, `/session idle`, `/session max-age`, serta pengiriman/perutean terikat) - `idleHours`: override Discord untuk auto-unfocus karena tidak aktif dalam jam (`0` menonaktifkan) - `maxAgeHours`: override Discord untuk usia maksimum keras dalam jam (`0` menonaktifkan) - `spawnSubagentSessions`: sakelar opt-in untuk pembuatan/pengikatan thread otomatis `sessions_spawn({ thread: true })` -- Entri `bindings[]` tingkat atas dengan `type: "acp"` mengonfigurasi binding ACP persisten untuk channel dan thread (gunakan id channel/thread di `match.peer.id`). Semantik field dibagikan di [ACP Agents](/id/tools/acp-agents#channel-specific-settings). -- `channels.discord.ui.components.accentColor` menetapkan warna aksen untuk kontainer komponen Discord v2. +- Entri `bindings[]` tingkat atas dengan `type: "acp"` mengonfigurasi binding ACP persisten untuk channel dan thread (gunakan id channel/thread dalam `match.peer.id`). Semantik bidang dibagikan di [ACP Agents](/id/tools/acp-agents#channel-specific-settings). +- `channels.discord.ui.components.accentColor` menetapkan warna aksen untuk container Discord components v2. - `channels.discord.voice` mengaktifkan percakapan channel suara Discord dan override auto-join + TTS opsional. - `channels.discord.voice.daveEncryption` dan `channels.discord.voice.decryptionFailureTolerance` diteruskan ke opsi DAVE `@discordjs/voice` (`true` dan `24` secara default). -- OpenClaw juga mencoba pemulihan penerimaan suara dengan keluar/masuk ulang ke session suara setelah kegagalan dekripsi berulang. +- OpenClaw juga mencoba pemulihan penerimaan suara dengan keluar/masuk kembali ke sesi suara setelah kegagalan dekripsi berulang. - `channels.discord.streaming` adalah kunci mode stream kanonis. Nilai lama `streamMode` dan boolean `streaming` dimigrasikan otomatis. - `channels.discord.autoPresence` memetakan ketersediaan runtime ke presence bot (healthy => online, degraded => idle, exhausted => dnd) dan mengizinkan override teks status opsional. -- `channels.discord.dangerouslyAllowNameMatching` mengaktifkan kembali pencocokan nama/tag yang dapat berubah (mode kompatibilitas break-glass). -- `channels.discord.execApprovals`: pengiriman persetujuan exec native Discord dan otorisasi approver. - - `enabled`: `true`, `false`, atau `"auto"` (default). Dalam mode auto, persetujuan exec aktif saat approver dapat di-resolve dari `approvers` atau `commands.ownerAllowFrom`. - - `approvers`: ID pengguna Discord yang diizinkan menyetujui permintaan exec. Menggunakan `commands.ownerAllowFrom` sebagai fallback jika dihilangkan. - - `agentFilter`: allowlist ID agent opsional. Hilangkan untuk meneruskan persetujuan bagi semua agent. - - `sessionFilter`: pola kunci session opsional (substring atau regex). - - `target`: ke mana prompt persetujuan dikirim. `"dm"` (default) mengirim ke DM approver, `"channel"` mengirim ke channel asal, `"both"` mengirim ke keduanya. Saat target mencakup `"channel"`, tombol hanya dapat digunakan oleh approver yang berhasil di-resolve. - - `cleanupAfterResolve`: saat `true`, hapus DM persetujuan setelah disetujui, ditolak, atau timeout. +- `channels.discord.dangerouslyAllowNameMatching` mengaktifkan kembali pencocokan nama/tag yang bisa berubah (mode kompatibilitas break-glass). +- `channels.discord.execApprovals`: pengiriman approval exec native Discord dan otorisasi approver. + - `enabled`: `true`, `false`, atau `"auto"` (default). Dalam mode auto, approval exec aktif saat approver dapat di-resolve dari `approvers` atau `commands.ownerAllowFrom`. + - `approvers`: ID pengguna Discord yang diizinkan menyetujui permintaan exec. Fallback ke `commands.ownerAllowFrom` jika dihilangkan. + - `agentFilter`: allowlist ID agen opsional. Hilangkan untuk meneruskan approval bagi semua agen. + - `sessionFilter`: pola kunci sesi opsional (substring atau regex). + - `target`: tempat mengirim prompt approval. `"dm"` (default) mengirim ke DM approver, `"channel"` mengirim ke channel asal, `"both"` mengirim ke keduanya. Saat target mencakup `"channel"`, tombol hanya bisa digunakan oleh approver yang berhasil di-resolve. + - `cleanupAfterResolve`: saat `true`, menghapus DM approval setelah approval, penolakan, atau timeout. **Mode notifikasi reaksi:** `off` (tidak ada), `own` (pesan bot, default), `all` (semua pesan), `allowlist` (dari `guilds..users` pada semua pesan). @@ -383,7 +397,7 @@ WhatsApp berjalan melalui channel web gateway (Baileys Web). Ini dimulai secara - SecretRef service account juga didukung (`serviceAccountRef`). - Fallback env: `GOOGLE_CHAT_SERVICE_ACCOUNT` atau `GOOGLE_CHAT_SERVICE_ACCOUNT_FILE`. - Gunakan `spaces/` atau `users/` untuk target pengiriman. -- `channels.googlechat.dangerouslyAllowNameMatching` mengaktifkan kembali pencocokan principal email yang dapat berubah (mode kompatibilitas break-glass). +- `channels.googlechat.dangerouslyAllowNameMatching` mengaktifkan kembali pencocokan principal email yang bisa berubah (mode kompatibilitas break-glass). ### Slack @@ -433,8 +447,10 @@ WhatsApp berjalan melalui channel web gateway (Baileys Web). Ini dimulai secara typingReaction: "hourglass_flowing_sand", textChunkLimit: 4000, chunkMode: "length", - streaming: "partial", // off | partial | block | progress (mode preview) - nativeStreaming: true, // gunakan API streaming native Slack saat streaming=partial + streaming: { + mode: "partial", // off | partial | block | progress + nativeTransport: true, // use Slack native streaming API when mode=partial + }, mediaMaxMb: 20, execApprovals: { enabled: "auto", // true | false | "auto" @@ -448,34 +464,35 @@ WhatsApp berjalan melalui channel web gateway (Baileys Web). Ini dimulai secara } ``` -- **Mode socket** memerlukan `botToken` dan `appToken` (`SLACK_BOT_TOKEN` + `SLACK_APP_TOKEN` untuk fallback env akun default). -- **Mode HTTP** memerlukan `botToken` plus `signingSecret` (di root atau per-akun). +- **Socket mode** memerlukan `botToken` dan `appToken` (`SLACK_BOT_TOKEN` + `SLACK_APP_TOKEN` untuk fallback env akun default). +- **HTTP mode** memerlukan `botToken` plus `signingSecret` (di root atau per akun). - `botToken`, `appToken`, `signingSecret`, dan `userToken` menerima string plaintext atau objek SecretRef. -- Snapshot akun Slack menampilkan field sumber/status per kredensial seperti +- Snapshot akun Slack mengekspos bidang sumber/status per kredensial seperti `botTokenSource`, `botTokenStatus`, `appTokenStatus`, dan, dalam mode HTTP, - `signingSecretStatus`. `configured_unavailable` berarti akun - dikonfigurasi melalui SecretRef tetapi jalur command/runtime saat ini tidak dapat + `signingSecretStatus`. `configured_unavailable` berarti akun tersebut + dikonfigurasi melalui SecretRef tetapi path perintah/runtime saat ini tidak dapat me-resolve nilai secret. -- `configWrites: false` memblokir penulisan config yang dipicu Slack. -- `channels.slack.defaultAccount` opsional meng-override pemilihan akun default saat cocok dengan id akun yang dikonfigurasi. -- `channels.slack.streaming` adalah kunci mode stream kanonis. Nilai lama `streamMode` dan boolean `streaming` dimigrasikan otomatis. +- `configWrites: false` memblokir penulisan konfigurasi yang dimulai dari Slack. +- `channels.slack.defaultAccount` opsional menimpa pemilihan akun default saat cocok dengan ID akun yang dikonfigurasi. +- `channels.slack.streaming.mode` adalah kunci mode stream Slack kanonis. `channels.slack.streaming.nativeTransport` mengontrol transport streaming native Slack. Nilai lama `streamMode`, boolean `streaming`, dan `nativeStreaming` dimigrasikan otomatis. - Gunakan `user:` (DM) atau `channel:` untuk target pengiriman. **Mode notifikasi reaksi:** `off`, `own` (default), `all`, `allowlist` (dari `reactionAllowlist`). -**Isolasi session thread:** `thread.historyScope` per-thread (default) atau dibagikan di seluruh channel. `thread.inheritParent` menyalin transkrip channel induk ke thread baru. +**Isolasi sesi thread:** `thread.historyScope` bersifat per-thread (default) atau dibagikan di seluruh channel. `thread.inheritParent` menyalin transkrip channel induk ke thread baru. +- Streaming native Slack plus status thread bergaya asisten Slack "is typing..." memerlukan target balasan thread. DM tingkat atas tetap di luar thread secara default, jadi menggunakan `typingReaction` atau pengiriman normal alih-alih pratinjau bergaya thread. - `typingReaction` menambahkan reaksi sementara ke pesan Slack masuk saat balasan sedang berjalan, lalu menghapusnya saat selesai. Gunakan shortcode emoji Slack seperti `"hourglass_flowing_sand"`. -- `channels.slack.execApprovals`: pengiriman persetujuan exec native Slack dan otorisasi approver. Skema sama seperti Discord: `enabled` (`true`/`false`/`"auto"`), `approvers` (ID pengguna Slack), `agentFilter`, `sessionFilter`, dan `target` (`"dm"`, `"channel"`, atau `"both"`). +- `channels.slack.execApprovals`: pengiriman approval exec native Slack dan otorisasi approver. Skema sama dengan Discord: `enabled` (`true`/`false`/`"auto"`), `approvers` (ID pengguna Slack), `agentFilter`, `sessionFilter`, dan `target` (`"dm"`, `"channel"`, atau `"both"`). -| Grup tindakan | Default | Catatan | -| ------------ | ------- | --------------------- | -| reactions | aktif | React + daftar reaksi | -| messages | aktif | Baca/kirim/edit/hapus | -| pins | aktif | Sematkan/lepas/daftar | -| memberInfo | aktif | Info anggota | -| emojiList | aktif | Daftar emoji kustom | +| Grup aksi | Default | Catatan | +| ------------ | ------- | ----------------------- | +| reactions | enabled | React + daftar reaksi | +| messages | enabled | Baca/kirim/edit/hapus | +| pins | enabled | Pin/unpin/daftar | +| memberInfo | enabled | Informasi anggota | +| emojiList | enabled | Daftar emoji kustom | ### Mattermost @@ -499,7 +516,7 @@ Mattermost dikirim sebagai plugin: `openclaw plugins install @openclaw/mattermos native: true, // opt-in nativeSkills: true, callbackPath: "/api/channels/mattermost/command", - // URL eksplisit opsional untuk deployment reverse-proxy/publik + // Optional explicit URL for reverse-proxy/public deployments callbackUrl: "https://gateway.example.com/api/channels/mattermost/command", }, textChunkLimit: 4000, @@ -509,23 +526,23 @@ Mattermost dikirim sebagai plugin: `openclaw plugins install @openclaw/mattermos } ``` -Mode chat: `oncall` (merespons pada @-mention, default), `onmessage` (setiap pesan), `onchar` (pesan yang diawali prefix pemicu). +Mode chat: `oncall` (merespons pada @-mention, default), `onmessage` (setiap pesan), `onchar` (pesan yang diawali prefiks pemicu). -Saat command native Mattermost diaktifkan: +Saat perintah native Mattermost diaktifkan: - `commands.callbackPath` harus berupa path (misalnya `/api/channels/mattermost/command`), bukan URL penuh. -- `commands.callbackUrl` harus mengarah ke endpoint gateway OpenClaw dan dapat dijangkau dari server Mattermost. -- Callback slash native diautentikasi dengan token per-command yang dikembalikan - oleh Mattermost selama pendaftaran slash command. Jika pendaftaran gagal atau tidak ada - command yang diaktifkan, OpenClaw menolak callback dengan +- `commands.callbackUrl` harus me-resolve ke endpoint gateway OpenClaw dan dapat dijangkau dari server Mattermost. +- Callback slash native diautentikasi dengan token per perintah yang dikembalikan + oleh Mattermost saat registrasi slash command. Jika registrasi gagal atau tidak ada + perintah yang diaktifkan, OpenClaw menolak callback dengan `Unauthorized: invalid command token.` -- Untuk host callback private/tailnet/internal, Mattermost mungkin memerlukan +- Untuk host callback privat/tailnet/internal, Mattermost mungkin memerlukan `ServiceSettings.AllowedUntrustedInternalConnections` untuk menyertakan host/domain callback. Gunakan nilai host/domain, bukan URL penuh. -- `channels.mattermost.configWrites`: izinkan atau tolak penulisan config yang dipicu Mattermost. +- `channels.mattermost.configWrites`: izinkan atau tolak penulisan konfigurasi yang dimulai dari Mattermost. - `channels.mattermost.requireMention`: mewajibkan `@mention` sebelum membalas di channel. -- `channels.mattermost.groups..requireMention`: override mention-gating per-channel (`"*"` untuk default). -- `channels.mattermost.defaultAccount` opsional meng-override pemilihan akun default saat cocok dengan id akun yang dikonfigurasi. +- `channels.mattermost.groups..requireMention`: override mention-gating per channel (`"*"` untuk default). +- `channels.mattermost.defaultAccount` opsional menimpa pemilihan akun default saat cocok dengan ID akun yang dikonfigurasi. ### Signal @@ -534,7 +551,7 @@ Saat command native Mattermost diaktifkan: channels: { signal: { enabled: true, - account: "+15555550123", // binding akun opsional + account: "+15555550123", // optional account binding dmPolicy: "pairing", allowFrom: ["+15551234567", "uuid:123e4567-e89b-12d3-a456-426614174000"], configWrites: true, @@ -548,13 +565,13 @@ Saat command native Mattermost diaktifkan: **Mode notifikasi reaksi:** `off`, `own` (default), `all`, `allowlist` (dari `reactionAllowlist`). -- `channels.signal.account`: tetapkan startup channel ke identitas akun Signal tertentu. -- `channels.signal.configWrites`: izinkan atau tolak penulisan config yang dipicu Signal. -- `channels.signal.defaultAccount` opsional meng-override pemilihan akun default saat cocok dengan id akun yang dikonfigurasi. +- `channels.signal.account`: sematkan startup channel ke identitas akun Signal tertentu. +- `channels.signal.configWrites`: izinkan atau tolak penulisan konfigurasi yang dimulai dari Signal. +- `channels.signal.defaultAccount` opsional menimpa pemilihan akun default saat cocok dengan ID akun yang dikonfigurasi. ### BlueBubbles -BlueBubbles adalah jalur iMessage yang direkomendasikan (berbasis plugin, dikonfigurasi di bawah `channels.bluebubbles`). +BlueBubbles adalah jalur iMessage yang direkomendasikan (didukung plugin, dikonfigurasi di bawah `channels.bluebubbles`). ```json5 { @@ -562,21 +579,21 @@ BlueBubbles adalah jalur iMessage yang direkomendasikan (berbasis plugin, dikonf bluebubbles: { enabled: true, dmPolicy: "pairing", - // serverUrl, password, webhookPath, kontrol grup, dan tindakan lanjutan: - // lihat /channels/bluebubbles + // serverUrl, password, webhookPath, group controls, and advanced actions: + // see /channels/bluebubbles }, }, } ``` -- Jalur kunci inti yang dibahas di sini: `channels.bluebubbles`, `channels.bluebubbles.dmPolicy`. -- `channels.bluebubbles.defaultAccount` opsional meng-override pemilihan akun default saat cocok dengan id akun yang dikonfigurasi. -- Entri `bindings[]` tingkat atas dengan `type: "acp"` dapat mengikat percakapan BlueBubbles ke session ACP persisten. Gunakan handle atau string target BlueBubbles (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) di `match.peer.id`. Semantik field bersama: [ACP Agents](/id/tools/acp-agents#channel-specific-settings). +- Path kunci inti yang dicakup di sini: `channels.bluebubbles`, `channels.bluebubbles.dmPolicy`. +- `channels.bluebubbles.defaultAccount` opsional menimpa pemilihan akun default saat cocok dengan ID akun yang dikonfigurasi. +- Entri `bindings[]` tingkat atas dengan `type: "acp"` dapat mengikat percakapan BlueBubbles ke sesi ACP persisten. Gunakan handle atau string target BlueBubbles (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) di `match.peer.id`. Semantik bidang bersama: [ACP Agents](/id/tools/acp-agents#channel-specific-settings). - Konfigurasi channel BlueBubbles lengkap didokumentasikan di [BlueBubbles](/id/channels/bluebubbles). ### iMessage -OpenClaw menjalankan `imsg rpc` (JSON-RPC lewat stdio). Tidak memerlukan daemon atau port. +OpenClaw menjalankan `imsg rpc` (JSON-RPC melalui stdio). Tidak memerlukan daemon atau port. ```json5 { @@ -600,15 +617,15 @@ OpenClaw menjalankan `imsg rpc` (JSON-RPC lewat stdio). Tidak memerlukan daemon } ``` -- `channels.imessage.defaultAccount` opsional meng-override pemilihan akun default saat cocok dengan id akun yang dikonfigurasi. +- `channels.imessage.defaultAccount` opsional menimpa pemilihan akun default saat cocok dengan ID akun yang dikonfigurasi. - Memerlukan Full Disk Access ke DB Messages. -- Lebih disarankan target `chat_id:`. Gunakan `imsg chats --limit 20` untuk menampilkan daftar chat. -- `cliPath` dapat menunjuk ke wrapper SSH; set `remoteHost` (`host` atau `user@host`) untuk pengambilan lampiran SCP. +- Sebaiknya gunakan target `chat_id:`. Gunakan `imsg chats --limit 20` untuk mencantumkan chat. +- `cliPath` dapat menunjuk ke wrapper SSH; atur `remoteHost` (`host` atau `user@host`) untuk pengambilan lampiran SCP. - `attachmentRoots` dan `remoteAttachmentRoots` membatasi path lampiran masuk (default: `/Users/*/Library/Messages/Attachments`). - SCP menggunakan pemeriksaan host-key ketat, jadi pastikan host key relay sudah ada di `~/.ssh/known_hosts`. -- `channels.imessage.configWrites`: izinkan atau tolak penulisan config yang dipicu iMessage. -- Entri `bindings[]` tingkat atas dengan `type: "acp"` dapat mengikat percakapan iMessage ke session ACP persisten. Gunakan handle yang dinormalisasi atau target chat eksplisit (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) di `match.peer.id`. Semantik field bersama: [ACP Agents](/id/tools/acp-agents#channel-specific-settings). +- `channels.imessage.configWrites`: izinkan atau tolak penulisan konfigurasi yang dimulai dari iMessage. +- Entri `bindings[]` tingkat atas dengan `type: "acp"` dapat mengikat percakapan iMessage ke sesi ACP persisten. Gunakan handle yang dinormalisasi atau target chat eksplisit (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) di `match.peer.id`. Semantik bidang bersama: [ACP Agents](/id/tools/acp-agents#channel-specific-settings). @@ -621,7 +638,7 @@ exec ssh -T gateway-host imsg "$@" ### Matrix -Matrix didukung extension dan dikonfigurasi di bawah `channels.matrix`. +Matrix didukung ekstensi dan dikonfigurasi di bawah `channels.matrix`. ```json5 { @@ -651,25 +668,25 @@ Matrix didukung extension dan dikonfigurasi di bawah `channels.matrix`. } ``` -- Auth token menggunakan `accessToken`; auth password menggunakan `userId` + `password`. -- `channels.matrix.proxy` merutekan lalu lintas HTTP Matrix melalui proxy HTTP(S) eksplisit. Akun bernama dapat meng-override-nya dengan `channels.matrix.accounts..proxy`. -- `channels.matrix.network.dangerouslyAllowPrivateNetwork` mengizinkan homeserver private/internal. `proxy` dan opt-in jaringan ini adalah kontrol yang independen. +- Autentikasi token menggunakan `accessToken`; autentikasi password menggunakan `userId` + `password`. +- `channels.matrix.proxy` merutekan lalu lintas HTTP Matrix melalui proxy HTTP(S) eksplisit. Akun bernama dapat menimpanya dengan `channels.matrix.accounts..proxy`. +- `channels.matrix.network.dangerouslyAllowPrivateNetwork` mengizinkan homeserver privat/internal. `proxy` dan opt-in jaringan ini adalah kontrol yang independen. - `channels.matrix.defaultAccount` memilih akun yang diutamakan dalam pengaturan multi-akun. -- `channels.matrix.autoJoin` default ke `off`, sehingga room yang mengundang dan undangan baru bergaya DM diabaikan sampai Anda menetapkan `autoJoin: "allowlist"` dengan `autoJoinAllowlist` atau `autoJoin: "always"`. -- `channels.matrix.execApprovals`: pengiriman persetujuan exec native Matrix dan otorisasi approver. - - `enabled`: `true`, `false`, atau `"auto"` (default). Dalam mode auto, persetujuan exec aktif saat approver dapat di-resolve dari `approvers` atau `commands.ownerAllowFrom`. +- `channels.matrix.autoJoin` default ke `off`, sehingga room yang diundang dan undangan gaya DM baru diabaikan sampai Anda menetapkan `autoJoin: "allowlist"` dengan `autoJoinAllowlist` atau `autoJoin: "always"`. +- `channels.matrix.execApprovals`: pengiriman approval exec native Matrix dan otorisasi approver. + - `enabled`: `true`, `false`, atau `"auto"` (default). Dalam mode auto, approval exec aktif saat approver dapat di-resolve dari `approvers` atau `commands.ownerAllowFrom`. - `approvers`: ID pengguna Matrix (mis. `@owner:example.org`) yang diizinkan menyetujui permintaan exec. - - `agentFilter`: allowlist ID agent opsional. Hilangkan untuk meneruskan persetujuan bagi semua agent. - - `sessionFilter`: pola kunci session opsional (substring atau regex). - - `target`: ke mana prompt persetujuan dikirim. `"dm"` (default), `"channel"` (room asal), atau `"both"`. - - Override per-akun: `channels.matrix.accounts..execApprovals`. -- `channels.matrix.dm.sessionScope` mengontrol bagaimana DM Matrix dikelompokkan ke dalam session: `per-user` (default) dibagikan berdasarkan peer yang dirutekan, sementara `per-room` mengisolasi setiap room DM. -- Probe status Matrix dan lookup direktori live menggunakan kebijakan proxy yang sama dengan lalu lintas runtime. + - `agentFilter`: allowlist ID agen opsional. Hilangkan untuk meneruskan approval bagi semua agen. + - `sessionFilter`: pola kunci sesi opsional (substring atau regex). + - `target`: tempat mengirim prompt approval. `"dm"` (default), `"channel"` (room asal), atau `"both"`. + - Override per akun: `channels.matrix.accounts..execApprovals`. +- `channels.matrix.dm.sessionScope` mengontrol bagaimana DM Matrix dikelompokkan ke dalam sesi: `per-user` (default) berbagi berdasarkan peer yang dirutekan, sedangkan `per-room` mengisolasi setiap room DM. +- Probe status Matrix dan lookup direktori langsung menggunakan kebijakan proxy yang sama dengan lalu lintas runtime. - Konfigurasi Matrix lengkap, aturan penargetan, dan contoh setup didokumentasikan di [Matrix](/id/channels/matrix). ### Microsoft Teams -Microsoft Teams didukung extension dan dikonfigurasi di bawah `channels.msteams`. +Microsoft Teams didukung ekstensi dan dikonfigurasi di bawah `channels.msteams`. ```json5 { @@ -677,19 +694,19 @@ Microsoft Teams didukung extension dan dikonfigurasi di bawah `channels.msteams` msteams: { enabled: true, configWrites: true, - // appId, appPassword, tenantId, webhook, kebijakan team/channel: - // lihat /channels/msteams + // appId, appPassword, tenantId, webhook, team/channel policies: + // see /channels/msteams }, }, } ``` -- Jalur kunci inti yang dibahas di sini: `channels.msteams`, `channels.msteams.configWrites`. -- Konfigurasi Teams lengkap (kredensial, webhook, kebijakan DM/grup, override per-team/per-channel) didokumentasikan di [Microsoft Teams](/id/channels/msteams). +- Path kunci inti yang dicakup di sini: `channels.msteams`, `channels.msteams.configWrites`. +- Konfigurasi Teams lengkap (kredensial, webhook, kebijakan DM/grup, override per team/per channel) didokumentasikan di [Microsoft Teams](/id/channels/msteams). ### IRC -IRC didukung extension dan dikonfigurasi di bawah `channels.irc`. +IRC didukung ekstensi dan dikonfigurasi di bawah `channels.irc`. ```json5 { @@ -710,13 +727,13 @@ IRC didukung extension dan dikonfigurasi di bawah `channels.irc`. } ``` -- Jalur kunci inti yang dibahas di sini: `channels.irc`, `channels.irc.dmPolicy`, `channels.irc.configWrites`, `channels.irc.nickserv.*`. -- `channels.irc.defaultAccount` opsional meng-override pemilihan akun default saat cocok dengan id akun yang dikonfigurasi. +- Path kunci inti yang dicakup di sini: `channels.irc`, `channels.irc.dmPolicy`, `channels.irc.configWrites`, `channels.irc.nickserv.*`. +- `channels.irc.defaultAccount` opsional menimpa pemilihan akun default saat cocok dengan ID akun yang dikonfigurasi. - Konfigurasi channel IRC lengkap (host/port/TLS/channel/allowlist/mention gating) didokumentasikan di [IRC](/id/channels/irc). ### Multi-akun (semua channel) -Jalankan beberapa akun per channel (masing-masing dengan `accountId` sendiri): +Jalankan banyak akun per channel (masing-masing dengan `accountId` sendiri): ```json5 { @@ -739,16 +756,16 @@ Jalankan beberapa akun per channel (masing-masing dengan `accountId` sendiri): - `default` digunakan saat `accountId` dihilangkan (CLI + routing). - Token env hanya berlaku untuk akun **default**. -- Pengaturan channel dasar berlaku untuk semua akun kecuali dioverride per-akun. -- Gunakan `bindings[].match.accountId` untuk merutekan setiap akun ke agent yang berbeda. -- Jika Anda menambahkan akun non-default melalui `openclaw channels add` (atau onboarding channel) saat masih memakai config channel tingkat atas akun tunggal, OpenClaw terlebih dahulu mempromosikan nilai akun tunggal tingkat atas yang bersifat account-scoped ke dalam peta akun channel agar akun asli tetap berfungsi. Sebagian besar channel memindahkannya ke `channels..accounts.default`; Matrix dapat mempertahankan target bernama/default yang cocok yang sudah ada. -- Binding khusus channel yang sudah ada (tanpa `accountId`) tetap cocok dengan akun default; binding yang bersifat account-scoped tetap opsional. -- `openclaw doctor --fix` juga memperbaiki bentuk campuran dengan memindahkan nilai akun tunggal tingkat atas yang bersifat account-scoped ke akun hasil promosi yang dipilih untuk channel tersebut. Sebagian besar channel menggunakan `accounts.default`; Matrix dapat mempertahankan target bernama/default yang cocok yang sudah ada. +- Pengaturan channel dasar berlaku untuk semua akun kecuali ditimpa per akun. +- Gunakan `bindings[].match.accountId` untuk merutekan setiap akun ke agen yang berbeda. +- Jika Anda menambahkan akun non-default melalui `openclaw channels add` (atau onboarding channel) ketika masih menggunakan konfigurasi channel akun tunggal tingkat atas, OpenClaw terlebih dahulu mempromosikan nilai akun tunggal tingkat atas yang bercakupan akun ke peta akun channel agar akun asli tetap berfungsi. Sebagian besar channel memindahkannya ke `channels..accounts.default`; Matrix dapat mempertahankan target bernama/default yang sudah cocok. +- Binding khusus channel yang sudah ada (tanpa `accountId`) tetap cocok dengan akun default; binding bercakupan akun tetap opsional. +- `openclaw doctor --fix` juga memperbaiki shape campuran dengan memindahkan nilai akun tunggal tingkat atas yang bercakupan akun ke akun yang dipromosikan yang dipilih untuk channel itu. Sebagian besar channel menggunakan `accounts.default`; Matrix dapat mempertahankan target bernama/default yang sudah cocok. -### Channel extension lainnya +### Channel ekstensi lainnya -Banyak channel extension dikonfigurasi sebagai `channels.` dan didokumentasikan di halaman channel khusus masing-masing (misalnya Feishu, Matrix, LINE, Nostr, Zalo, Nextcloud Talk, Synology Chat, dan Twitch). -Lihat indeks channel lengkap: [Channels](/id/channels). +Banyak channel ekstensi dikonfigurasi sebagai `channels.` dan didokumentasikan di halaman channel khusus mereka (misalnya Feishu, Matrix, LINE, Nostr, Zalo, Nextcloud Talk, Synology Chat, dan Twitch). +Lihat indeks channel lengkap: [Channel](/id/channels). ### Mention gating chat grup @@ -757,8 +774,8 @@ Pesan grup secara default **memerlukan mention** (mention metadata atau pola reg **Jenis mention:** - **Mention metadata**: @-mention native platform. Diabaikan dalam mode self-chat WhatsApp. -- **Pola teks**: pola regex aman dalam `agents.list[].groupChat.mentionPatterns`. Pola tidak valid dan nested repetition yang tidak aman diabaikan. -- Mention gating hanya diterapkan saat deteksi memungkinkan (mention native atau setidaknya satu pola). +- **Pola teks**: pola regex aman dalam `agents.list[].groupChat.mentionPatterns`. Pola yang tidak valid dan pengulangan bertingkat yang tidak aman diabaikan. +- Mention gating diterapkan hanya saat deteksi memungkinkan (mention native atau setidaknya satu pola). ```json5 { @@ -771,7 +788,7 @@ Pesan grup secara default **memerlukan mention** (mention metadata atau pola reg } ``` -`messages.groupChat.historyLimit` menetapkan default global. Channel dapat meng-override dengan `channels..historyLimit` (atau per-akun). Set `0` untuk menonaktifkan. +`messages.groupChat.historyLimit` menetapkan default global. Channel dapat menimpanya dengan `channels..historyLimit` (atau per akun). Tetapkan `0` untuk menonaktifkan. #### Batas riwayat DM @@ -788,13 +805,13 @@ Pesan grup secara default **memerlukan mention** (mention metadata atau pola reg } ``` -Resolusi: override per-DM → default provider → tanpa batas (semua dipertahankan). +Resolusi: override per DM → default penyedia → tanpa batas (semua dipertahankan). Didukung: `telegram`, `whatsapp`, `discord`, `slack`, `signal`, `imessage`, `msteams`. #### Mode self-chat -Sertakan nomor Anda sendiri di `allowFrom` untuk mengaktifkan mode self-chat (mengabaikan @-mention native, hanya merespons pola teks): +Sertakan nomor Anda sendiri dalam `allowFrom` untuk mengaktifkan mode self-chat (mengabaikan @-mention native, hanya merespons pola teks): ```json5 { @@ -815,18 +832,24 @@ Sertakan nomor Anda sendiri di `allowFrom` untuk mengaktifkan mode self-chat (me } ``` -### Commands (penanganan command chat) +### Commands (penanganan perintah chat) ```json5 { commands: { - native: "auto", // daftarkan command native saat didukung - text: true, // parse /commands dalam pesan chat - bash: false, // izinkan ! (alias: /bash) + native: "auto", // register native commands when supported + nativeSkills: "auto", // register native skill commands when supported + text: true, // parse /commands in chat messages + bash: false, // allow ! (alias: /bash) bashForegroundMs: 2000, - config: false, // izinkan /config - debug: false, // izinkan /debug - restart: false, // izinkan /restart + tool restart gateway + config: false, // allow /config + mcp: false, // allow /mcp + plugins: false, // allow /plugins + debug: false, // allow /debug + restart: true, // allow /restart + gateway restart tool + ownerAllowFrom: ["discord:123456789012345678"], + ownerDisplay: "raw", // raw | hash + ownerDisplaySecret: "${OWNER_ID_HASH_SECRET}", allowFrom: { "*": ["user1"], discord: ["user:123"], @@ -836,24 +859,40 @@ Sertakan nomor Anda sendiri di `allowFrom` untuk mengaktifkan mode self-chat (me } ``` - + -- Command teks harus berupa pesan **mandiri** dengan awalan `/`. -- `native: "auto"` menyalakan command native untuk Discord/Telegram, membiarkan Slack mati. -- Override per channel: `channels.discord.commands.native` (bool atau `"auto"`). `false` menghapus command yang sebelumnya terdaftar. -- `channels.telegram.customCommands` menambahkan entri menu bot Telegram tambahan. -- `bash: true` mengaktifkan `! ` untuk shell host. Memerlukan `tools.elevated.enabled` dan pengirim berada di `tools.elevated.allowFrom.`. -- `config: true` mengaktifkan `/config` (membaca/menulis `openclaw.json`). Untuk klien gateway `chat.send`, penulisan persisten `/config set|unset` juga memerlukan `operator.admin`; `/config show` yang read-only tetap tersedia untuk klien operator biasa dengan cakupan tulis. -- `channels..configWrites` mengatur mutasi config per channel (default: true). -- Untuk channel multi-akun, `channels..accounts..configWrites` juga mengatur penulisan yang menargetkan akun tersebut (misalnya `/allowlist --config --account ` atau `/config set channels..accounts....`). -- `allowFrom` bersifat per-provider. Jika diatur, ini adalah **satu-satunya** sumber otorisasi (allowlist/pairing channel dan `useAccessGroups` diabaikan). -- `useAccessGroups: false` memungkinkan command melewati kebijakan access-group saat `allowFrom` tidak diatur. +- Blok ini mengonfigurasi permukaan perintah. Untuk katalog perintah built-in + bundled saat ini, lihat [Slash Commands](/id/tools/slash-commands). +- Halaman ini adalah **referensi kunci konfigurasi**, bukan katalog perintah lengkap. Perintah milik channel/plugin seperti QQ Bot `/bot-ping` `/bot-help` `/bot-logs`, LINE `/card`, device-pair `/pair`, memory `/dreaming`, phone-control `/phone`, dan Talk `/voice` didokumentasikan di halaman channel/plugin mereka serta [Slash Commands](/id/tools/slash-commands). +- Perintah teks harus berupa pesan **mandiri** dengan awalan `/`. +- `native: "auto"` menyalakan perintah native untuk Discord/Telegram, membiarkan Slack nonaktif. +- `nativeSkills: "auto"` menyalakan perintah skill native untuk Discord/Telegram, membiarkan Slack nonaktif. +- Override per channel: `channels.discord.commands.native` (bool atau `"auto"`). `false` menghapus perintah yang sebelumnya didaftarkan. +- Override registrasi skill native per channel dengan `channels..commands.nativeSkills`. +- `channels.telegram.customCommands` menambahkan entri menu bot Telegram ekstra. +- `bash: true` mengaktifkan `! ` untuk shell host. Memerlukan `tools.elevated.enabled` dan pengirim ada dalam `tools.elevated.allowFrom.`. +- `config: true` mengaktifkan `/config` (membaca/menulis `openclaw.json`). Untuk klien gateway `chat.send`, penulisan persisten `/config set|unset` juga memerlukan `operator.admin`; `/config show` yang hanya-baca tetap tersedia untuk klien operator dengan cakupan tulis normal. +- `mcp: true` mengaktifkan `/mcp` untuk konfigurasi server MCP yang dikelola OpenClaw di bawah `mcp.servers`. +- `plugins: true` mengaktifkan `/plugins` untuk discovery plugin, install, dan kontrol enable/disable. +- `channels..configWrites` mengontrol mutasi konfigurasi per channel (default: true). +- Untuk channel multi-akun, `channels..accounts..configWrites` juga mengontrol penulisan yang menargetkan akun tersebut (misalnya `/allowlist --config --account ` atau `/config set channels..accounts....`). +- `restart: false` menonaktifkan `/restart` dan aksi alat restart gateway. Default: `true`. +- `ownerAllowFrom` adalah explicit owner allowlist untuk perintah/alat khusus owner. Ini terpisah dari `allowFrom`. +- `ownerDisplay: "hash"` melakukan hash pada ID owner di system prompt. Atur `ownerDisplaySecret` untuk mengontrol hashing. +- `allowFrom` bersifat per penyedia. Saat diatur, ini adalah **satu-satunya** sumber otorisasi (allowlist/pairing channel dan `useAccessGroups` diabaikan). +- `useAccessGroups: false` memungkinkan perintah melewati kebijakan grup akses saat `allowFrom` tidak diatur. +- Peta dokumen perintah: + - katalog built-in + bundled: [Slash Commands](/id/tools/slash-commands) + - permukaan perintah khusus channel: [Channel](/id/channels) + - perintah QQ Bot: [QQ Bot](/id/channels/qqbot) + - perintah pairing: [Pairing](/id/channels/pairing) + - perintah kartu LINE: [LINE](/id/channels/line) + - memory dreaming: [Dreaming](/id/concepts/dreaming) --- -## Default agent +## Default agen ### `agents.defaults.workspace` @@ -867,7 +906,7 @@ Default: `~/.openclaw/workspace`. ### `agents.defaults.repoRoot` -Root repositori opsional yang ditampilkan pada baris Runtime di system prompt. Jika tidak diatur, OpenClaw mendeteksi otomatis dengan menelusuri ke atas dari workspace. +Root repository opsional yang ditampilkan pada baris Runtime di system prompt. Jika tidak diatur, OpenClaw mendeteksi otomatis dengan menelusuri ke atas dari workspace. ```json5 { @@ -877,7 +916,7 @@ Root repositori opsional yang ditampilkan pada baris Runtime di system prompt. J ### `agents.defaults.skills` -Allowlist Skills default opsional untuk agent yang tidak menetapkan +Allowlist skill default opsional untuk agen yang tidak mengatur `agents.list[].skills`. ```json5 @@ -885,19 +924,19 @@ Allowlist Skills default opsional untuk agent yang tidak menetapkan agents: { defaults: { skills: ["github", "weather"] }, list: [ - { id: "writer" }, // mewarisi github, weather - { id: "docs", skills: ["docs-search"] }, // menggantikan default - { id: "locked-down", skills: [] }, // tanpa skills + { id: "writer" }, // inherits github, weather + { id: "docs", skills: ["docs-search"] }, // replaces defaults + { id: "locked-down", skills: [] }, // no skills ], }, } ``` -- Hilangkan `agents.defaults.skills` agar skills tidak dibatasi secara default. +- Hilangkan `agents.defaults.skills` untuk skill tanpa batas secara default. - Hilangkan `agents.list[].skills` untuk mewarisi default. -- Set `agents.list[].skills: []` untuk tanpa skills. -- Daftar `agents.list[].skills` yang tidak kosong adalah set akhir untuk agent tersebut; ini - tidak digabung dengan default. +- Tetapkan `agents.list[].skills: []` untuk tanpa skill. +- Daftar `agents.list[].skills` yang tidak kosong adalah set final untuk agen tersebut; daftar ini + tidak digabungkan dengan default. ### `agents.defaults.skipBootstrap` @@ -913,7 +952,7 @@ Menonaktifkan pembuatan otomatis file bootstrap workspace (`AGENTS.md`, `SOUL.md Mengontrol kapan file bootstrap workspace disuntikkan ke system prompt. Default: `"always"`. -- `"continuation-skip"`: giliran lanjutan yang aman (setelah respons asisten selesai) melewati penyuntikan ulang bootstrap workspace, mengurangi ukuran prompt. Proses heartbeat dan percobaan ulang pasca-compaction tetap membangun ulang konteks. +- `"continuation-skip"`: giliran lanjutan yang aman (setelah respons asisten selesai) melewati penyuntikan ulang bootstrap workspace, mengurangi ukuran prompt. Proses heartbeat dan retry pasca-compaction tetap membangun ulang konteks. ```json5 { @@ -933,7 +972,7 @@ Karakter maksimum per file bootstrap workspace sebelum dipotong. Default: `20000 ### `agents.defaults.bootstrapTotalMaxChars` -Jumlah total karakter maksimum yang disuntikkan di seluruh file bootstrap workspace. Default: `150000`. +Total karakter maksimum yang disuntikkan di seluruh file bootstrap workspace. Default: `150000`. ```json5 { @@ -943,12 +982,12 @@ Jumlah total karakter maksimum yang disuntikkan di seluruh file bootstrap worksp ### `agents.defaults.bootstrapPromptTruncationWarning` -Mengontrol teks peringatan yang terlihat oleh agent saat konteks bootstrap dipotong. +Mengontrol teks peringatan yang terlihat oleh agen saat konteks bootstrap dipotong. Default: `"once"`. - `"off"`: jangan pernah menyuntikkan teks peringatan ke system prompt. -- `"once"`: suntikkan peringatan sekali per signature pemotongan yang unik (direkomendasikan). -- `"always"`: suntikkan peringatan pada setiap proses saat ada pemotongan. +- `"once"`: suntikkan peringatan sekali per signature pemotongan unik (disarankan). +- `"always"`: suntikkan peringatan pada setiap run saat ada pemotongan. ```json5 { @@ -958,11 +997,11 @@ Default: `"once"`. ### `agents.defaults.imageMaxDimensionPx` -Ukuran piksel maksimum untuk sisi gambar terpanjang dalam blok gambar transcript/tool sebelum pemanggilan provider. +Ukuran piksel maksimum untuk sisi gambar terpanjang dalam blok gambar transkrip/alat sebelum panggilan penyedia. Default: `1200`. -Nilai lebih rendah biasanya mengurangi penggunaan vision-token dan ukuran payload permintaan untuk proses yang banyak memakai screenshot. -Nilai lebih tinggi mempertahankan lebih banyak detail visual. +Nilai yang lebih rendah biasanya mengurangi penggunaan vision-token dan ukuran payload permintaan untuk run yang banyak screenshot. +Nilai yang lebih tinggi mempertahankan lebih banyak detail visual. ```json5 { @@ -972,7 +1011,7 @@ Nilai lebih tinggi mempertahankan lebih banyak detail visual. ### `agents.defaults.userTimezone` -Timezone untuk konteks system prompt (bukan timestamp pesan). Menggunakan timezone host sebagai fallback. +Zona waktu untuk konteks system prompt (bukan stempel waktu pesan). Fallback ke zona waktu host. ```json5 { @@ -982,7 +1021,7 @@ Timezone untuk konteks system prompt (bukan timestamp pesan). Menggunakan timezo ### `agents.defaults.timeFormat` -Format waktu di system prompt. Default: `auto` (preferensi OS). +Format waktu dalam system prompt. Default: `auto` (preferensi OS). ```json5 { @@ -1020,7 +1059,7 @@ Format waktu di system prompt. Default: `auto` (preferensi OS). primary: "anthropic/claude-opus-4-6", fallbacks: ["openai/gpt-5.4-mini"], }, - params: { cacheRetention: "long" }, // parameter provider default global + params: { cacheRetention: "long" }, // global default provider params pdfMaxBytesMb: 10, pdfMaxPages: 20, thinkingDefault: "low", @@ -1039,39 +1078,39 @@ Format waktu di system prompt. Default: `auto` (preferensi OS). - Bentuk string hanya menetapkan model utama. - Bentuk objek menetapkan model utama plus model failover berurutan. - `imageModel`: menerima string (`"provider/model"`) atau objek (`{ primary, fallbacks }`). - - Digunakan oleh jalur tool `image` sebagai konfigurasi vision-model. - - Juga digunakan sebagai routing fallback saat model yang dipilih/default tidak dapat menerima input gambar. + - Digunakan oleh path alat `image` sebagai konfigurasi model vision-nya. + - Juga digunakan sebagai perutean fallback saat model yang dipilih/default tidak dapat menerima input gambar. - `imageGenerationModel`: menerima string (`"provider/model"`) atau objek (`{ primary, fallbacks }`). - - Digunakan oleh kapabilitas pembuatan gambar bersama dan permukaan tool/plugin masa depan yang menghasilkan gambar. - - Nilai umum: `google/gemini-3.1-flash-image-preview` untuk pembuatan gambar Gemini native, `fal/fal-ai/flux/dev` untuk fal, atau `openai/gpt-image-1` untuk OpenAI Images. - - Jika Anda memilih provider/model secara langsung, konfigurasi juga auth/API key provider yang sesuai (misalnya `GEMINI_API_KEY` atau `GOOGLE_API_KEY` untuk `google/*`, `OPENAI_API_KEY` untuk `openai/*`, `FAL_KEY` untuk `fal/*`). - - Jika dihilangkan, `image_generate` tetap dapat menyimpulkan default provider berbasis auth. Ia mencoba provider default saat ini terlebih dahulu, lalu provider pembuatan gambar terdaftar lainnya dalam urutan provider-id. + - Digunakan oleh kapabilitas pembuatan gambar bersama dan permukaan alat/plugin mendatang yang menghasilkan gambar. + - Nilai umum: `google/gemini-3.1-flash-image-preview` untuk pembuatan gambar native Gemini, `fal/fal-ai/flux/dev` untuk fal, atau `openai/gpt-image-1` untuk OpenAI Images. + - Jika Anda memilih provider/model secara langsung, konfigurasikan juga auth/API key penyedia yang cocok (misalnya `GEMINI_API_KEY` atau `GOOGLE_API_KEY` untuk `google/*`, `OPENAI_API_KEY` untuk `openai/*`, `FAL_KEY` untuk `fal/*`). + - Jika dihilangkan, `image_generate` masih dapat menyimpulkan default penyedia yang didukung auth. Pertama mencoba penyedia default saat ini, lalu penyedia pembuatan gambar terdaftar lainnya dalam urutan provider-id. - `musicGenerationModel`: menerima string (`"provider/model"`) atau objek (`{ primary, fallbacks }`). - - Digunakan oleh kapabilitas pembuatan musik bersama dan tool bawaan `music_generate`. + - Digunakan oleh kapabilitas pembuatan musik bersama dan alat built-in `music_generate`. - Nilai umum: `google/lyria-3-clip-preview`, `google/lyria-3-pro-preview`, atau `minimax/music-2.5+`. - - Jika dihilangkan, `music_generate` tetap dapat menyimpulkan default provider berbasis auth. Ia mencoba provider default saat ini terlebih dahulu, lalu provider pembuatan musik terdaftar lainnya dalam urutan provider-id. - - Jika Anda memilih provider/model secara langsung, konfigurasi juga auth/API key provider yang sesuai. + - Jika dihilangkan, `music_generate` masih dapat menyimpulkan default penyedia yang didukung auth. Pertama mencoba penyedia default saat ini, lalu penyedia pembuatan musik terdaftar lainnya dalam urutan provider-id. + - Jika Anda memilih provider/model secara langsung, konfigurasikan juga auth/API key penyedia yang cocok. - `videoGenerationModel`: menerima string (`"provider/model"`) atau objek (`{ primary, fallbacks }`). - - Digunakan oleh kapabilitas pembuatan video bersama dan tool bawaan `video_generate`. + - Digunakan oleh kapabilitas pembuatan video bersama dan alat built-in `video_generate`. - Nilai umum: `qwen/wan2.6-t2v`, `qwen/wan2.6-i2v`, `qwen/wan2.6-r2v`, `qwen/wan2.6-r2v-flash`, atau `qwen/wan2.7-r2v`. - - Jika dihilangkan, `video_generate` tetap dapat menyimpulkan default provider berbasis auth. Ia mencoba provider default saat ini terlebih dahulu, lalu provider pembuatan video terdaftar lainnya dalam urutan provider-id. - - Jika Anda memilih provider/model secara langsung, konfigurasi juga auth/API key provider yang sesuai. - - Provider pembuatan video Qwen bawaan saat ini mendukung hingga 1 video keluaran, 1 gambar masukan, 4 video masukan, durasi 10 detik, dan opsi tingkat provider `size`, `aspectRatio`, `resolution`, `audio`, dan `watermark`. + - Jika dihilangkan, `video_generate` masih dapat menyimpulkan default penyedia yang didukung auth. Pertama mencoba penyedia default saat ini, lalu penyedia pembuatan video terdaftar lainnya dalam urutan provider-id. + - Jika Anda memilih provider/model secara langsung, konfigurasikan juga auth/API key penyedia yang cocok. + - Penyedia pembuatan video Qwen bundled saat ini mendukung hingga 1 video output, 1 gambar input, 4 video input, durasi 10 detik, dan opsi tingkat penyedia `size`, `aspectRatio`, `resolution`, `audio`, dan `watermark`. - `pdfModel`: menerima string (`"provider/model"`) atau objek (`{ primary, fallbacks }`). - - Digunakan oleh tool `pdf` untuk routing model. - - Jika dihilangkan, tool PDF kembali ke `imageModel`, lalu ke model session/default yang berhasil di-resolve. -- `pdfMaxBytesMb`: batas ukuran PDF default untuk tool `pdf` saat `maxBytesMb` tidak diberikan saat pemanggilan. -- `pdfMaxPages`: jumlah halaman maksimum default yang dipertimbangkan oleh mode fallback ekstraksi pada tool `pdf`. -- `verboseDefault`: level verbose default untuk agent. Nilai: `"off"`, `"on"`, `"full"`. Default: `"off"`. -- `elevatedDefault`: level output elevated default untuk agent. Nilai: `"off"`, `"on"`, `"ask"`, `"full"`. Default: `"on"`. -- `model.primary`: format `provider/model` (mis. `openai/gpt-5.4`). Jika Anda menghilangkan provider, OpenClaw mencoba alias terlebih dahulu, lalu kecocokan exact model id untuk configured-provider yang unik, dan baru kemudian kembali ke default provider yang dikonfigurasi (perilaku kompatibilitas lama yang sudah deprecated, jadi lebih baik gunakan `provider/model` eksplisit). Jika provider itu tidak lagi mengekspos model default yang dikonfigurasi, OpenClaw kembali ke provider/model pertama yang dikonfigurasi alih-alih memunculkan default lama yang stale dan providernya sudah dihapus. -- `models`: katalog model dan allowlist yang dikonfigurasi untuk `/model`. Setiap entri dapat mencakup `alias` (shortcut) dan `params` (spesifik provider, misalnya `temperature`, `maxTokens`, `cacheRetention`, `context1m`). -- `params`: parameter provider default global yang diterapkan ke semua model. Tetapkan di `agents.defaults.params` (mis. `{ cacheRetention: "long" }`). -- Urutan prioritas penggabungan `params` (config): `agents.defaults.params` (dasar global) dioverride oleh `agents.defaults.models["provider/model"].params` (per-model), lalu `agents.list[].params` (id agent yang cocok) meng-override per kunci. Lihat [Prompt Caching](/id/reference/prompt-caching) untuk detail. -- Penulis config yang memutasi field ini (misalnya `/models set`, `/models set-image`, dan command tambah/hapus fallback) menyimpan bentuk objek kanonis dan mempertahankan daftar fallback yang sudah ada bila memungkinkan. -- `maxConcurrent`: jumlah maksimum proses agent paralel di seluruh session (setiap session tetap diserialkan). Default: 4. + - Digunakan oleh alat `pdf` untuk perutean model. + - Jika dihilangkan, alat PDF fallback ke `imageModel`, lalu ke model sesi/default yang telah di-resolve. +- `pdfMaxBytesMb`: batas ukuran PDF default untuk alat `pdf` saat `maxBytesMb` tidak diberikan saat pemanggilan. +- `pdfMaxPages`: jumlah halaman maksimum default yang dipertimbangkan oleh mode fallback ekstraksi dalam alat `pdf`. +- `verboseDefault`: level verbose default untuk agen. Nilai: `"off"`, `"on"`, `"full"`. Default: `"off"`. +- `elevatedDefault`: level output elevated default untuk agen. Nilai: `"off"`, `"on"`, `"ask"`, `"full"`. Default: `"on"`. +- `model.primary`: format `provider/model` (mis. `openai/gpt-5.4`). Jika Anda menghilangkan provider, OpenClaw mencoba alias terlebih dahulu, lalu kecocokan unik configured-provider untuk ID model tepat itu, dan baru kemudian fallback ke provider default yang dikonfigurasi (perilaku kompatibilitas lama yang sudah deprecated, jadi sebaiknya gunakan `provider/model` eksplisit). Jika provider itu tidak lagi mengekspos model default yang dikonfigurasi, OpenClaw fallback ke provider/model terkonfigurasi pertama alih-alih menampilkan default penyedia lama yang sudah dihapus. +- `models`: katalog model dan allowlist terkonfigurasi untuk `/model`. Setiap entri dapat menyertakan `alias` (shortcut) dan `params` (spesifik penyedia, misalnya `temperature`, `maxTokens`, `cacheRetention`, `context1m`). +- `params`: parameter provider default global yang diterapkan ke semua model. Ditetapkan di `agents.defaults.params` (mis. `{ cacheRetention: "long" }`). +- Prioritas penggabungan `params` (konfigurasi): `agents.defaults.params` (basis global) ditimpa oleh `agents.defaults.models["provider/model"].params` (per-model), lalu `agents.list[].params` (ID agen yang cocok) menimpa per kunci. Lihat [Prompt Caching](/id/reference/prompt-caching) untuk detail. +- Penulis konfigurasi yang memutasi bidang-bidang ini (misalnya `/models set`, `/models set-image`, serta perintah tambah/hapus fallback) menyimpan bentuk objek kanonis dan mempertahankan daftar fallback yang ada jika memungkinkan. +- `maxConcurrent`: maksimum run agen paralel lintas sesi (setiap sesi tetap diserialisasi). Default: 4. -**Alias singkat bawaan** (hanya berlaku saat model berada di `agents.defaults.models`): +**Shorthand alias built-in** (hanya berlaku saat model ada di `agents.defaults.models`): | Alias | Model | | ------------------- | -------------------------------------- | @@ -1086,13 +1125,13 @@ Format waktu di system prompt. Default: `auto` (preferensi OS). Alias yang Anda konfigurasi selalu menang atas default. -Model Z.AI GLM-4.x otomatis mengaktifkan mode thinking kecuali Anda menetapkan `--thinking off` atau mendefinisikan sendiri `agents.defaults.models["zai/"].params.thinking`. -Model Z.AI mengaktifkan `tool_stream` secara default untuk streaming tool call. Set `agents.defaults.models["zai/"].params.tool_stream` ke `false` untuk menonaktifkannya. -Model Anthropic Claude 4.6 default ke thinking `adaptive` saat tidak ada level thinking eksplisit yang diatur. +Model Z.AI GLM-4.x secara otomatis mengaktifkan mode thinking kecuali Anda menetapkan `--thinking off` atau mendefinisikan sendiri `agents.defaults.models["zai/"].params.thinking`. +Model Z.AI mengaktifkan `tool_stream` secara default untuk streaming panggilan alat. Tetapkan `agents.defaults.models["zai/"].params.tool_stream` ke `false` untuk menonaktifkannya. +Model Anthropic Claude 4.6 default ke thinking `adaptive` saat tidak ada level thinking eksplisit yang ditetapkan. ### `agents.defaults.cliBackends` -Backend CLI opsional untuk proses fallback hanya-teks (tanpa tool call). Berguna sebagai cadangan saat provider API gagal. +Backend CLI opsional untuk run fallback hanya teks (tanpa panggilan alat). Berguna sebagai cadangan saat penyedia API gagal. ```json5 { @@ -1120,28 +1159,28 @@ Backend CLI opsional untuk proses fallback hanya-teks (tanpa tool call). Berguna } ``` -- Backend CLI bersifat text-first; tool selalu dinonaktifkan. -- Session didukung saat `sessionArg` diatur. +- Backend CLI bersifat text-first; alat selalu dinonaktifkan. +- Sesi didukung saat `sessionArg` diatur. - Pass-through gambar didukung saat `imageArg` menerima path file. ### `agents.defaults.heartbeat` -Proses heartbeat berkala. +Run heartbeat berkala. ```json5 { agents: { defaults: { heartbeat: { - every: "30m", // 0m menonaktifkan + every: "30m", // 0m disables model: "openai/gpt-5.4-mini", includeReasoning: false, - lightContext: false, // default: false; true hanya mempertahankan HEARTBEAT.md dari file bootstrap workspace - isolatedSession: false, // default: false; true menjalankan tiap heartbeat dalam session baru (tanpa riwayat percakapan) + lightContext: false, // default: false; true keeps only HEARTBEAT.md from workspace bootstrap files + isolatedSession: false, // default: false; true runs each heartbeat in a fresh session (no conversation history) session: "main", to: "+15555550123", directPolicy: "allow", // allow (default) | block - target: "none", // default: none | opsi: last | whatsapp | telegram | discord | ... + target: "none", // default: none | options: last | whatsapp | telegram | discord | ... prompt: "Read HEARTBEAT.md if it exists...", ackMaxChars: 300, suppressToolErrorWarnings: false, @@ -1151,13 +1190,13 @@ Proses heartbeat berkala. } ``` -- `every`: string durasi (ms/s/m/h). Default: `30m` (auth API-key) atau `1h` (auth OAuth). Set ke `0m` untuk menonaktifkan. -- `suppressToolErrorWarnings`: saat true, menyembunyikan payload peringatan error tool selama proses heartbeat. -- `directPolicy`: kebijakan pengiriman direct/DM. `allow` (default) mengizinkan pengiriman bertarget langsung. `block` menekan pengiriman bertarget langsung dan mengeluarkan `reason=dm-blocked`. -- `lightContext`: saat true, proses heartbeat menggunakan konteks bootstrap ringan dan hanya mempertahankan `HEARTBEAT.md` dari file bootstrap workspace. -- `isolatedSession`: saat true, setiap heartbeat berjalan dalam session baru tanpa riwayat percakapan sebelumnya. Pola isolasi sama seperti cron `sessionTarget: "isolated"`. Mengurangi biaya token per-heartbeat dari ~100K menjadi ~2-5K token. -- Per-agent: tetapkan `agents.list[].heartbeat`. Saat ada agent mana pun yang mendefinisikan `heartbeat`, **hanya agent tersebut** yang menjalankan heartbeat. -- Heartbeat menjalankan giliran agent penuh — interval yang lebih pendek menghabiskan lebih banyak token. +- `every`: string durasi (ms/s/m/h). Default: `30m` (auth API-key) atau `1h` (auth OAuth). Tetapkan `0m` untuk menonaktifkan. +- `suppressToolErrorWarnings`: saat true, menekan payload peringatan error alat selama run heartbeat. +- `directPolicy`: kebijakan pengiriman direct/DM. `allow` (default) mengizinkan pengiriman target langsung. `block` menekan pengiriman target langsung dan mengeluarkan `reason=dm-blocked`. +- `lightContext`: saat true, run heartbeat menggunakan konteks bootstrap ringan dan hanya mempertahankan `HEARTBEAT.md` dari file bootstrap workspace. +- `isolatedSession`: saat true, setiap heartbeat berjalan dalam sesi baru tanpa riwayat percakapan sebelumnya. Pola isolasi yang sama seperti cron `sessionTarget: "isolated"`. Mengurangi biaya token per heartbeat dari ~100K menjadi ~2-5K token. +- Per agen: atur `agents.list[].heartbeat`. Saat ada agen mendefinisikan `heartbeat`, **hanya agen tersebut** yang menjalankan heartbeat. +- Heartbeat menjalankan giliran agen penuh — interval yang lebih pendek membakar lebih banyak token. ### `agents.defaults.compaction` @@ -1167,14 +1206,14 @@ Proses heartbeat berkala. defaults: { compaction: { mode: "safeguard", // default | safeguard - provider: "my-provider", // id plugin provider compaction terdaftar (opsional) + provider: "my-provider", // id of a registered compaction provider plugin (optional) timeoutSeconds: 900, reserveTokensFloor: 24000, identifierPolicy: "strict", // strict | off | custom - identifierInstructions: "Preserve deployment IDs, ticket IDs, and host:port pairs exactly.", // digunakan saat identifierPolicy=custom - postCompactionSections: ["Session Startup", "Red Lines"], // [] menonaktifkan penyuntikan ulang - model: "openrouter/anthropic/claude-sonnet-4-6", // override model khusus compaction opsional - notifyUser: true, // kirim pemberitahuan singkat saat compaction dimulai (default: false) + identifierInstructions: "Preserve deployment IDs, ticket IDs, and host:port pairs exactly.", // used when identifierPolicy=custom + postCompactionSections: ["Session Startup", "Red Lines"], // [] disables reinjection + model: "openrouter/anthropic/claude-sonnet-4-6", // optional compaction-only model override + notifyUser: true, // send a brief notice when compaction starts (default: false) memoryFlush: { enabled: true, softThresholdTokens: 6000, @@ -1187,19 +1226,19 @@ Proses heartbeat berkala. } ``` -- `mode`: `default` atau `safeguard` (peringkasan bertahap untuk riwayat panjang). Lihat [Compaction](/id/concepts/compaction). -- `provider`: id plugin provider compaction terdaftar. Saat diatur, `summarize()` milik provider dipanggil alih-alih peringkasan LLM bawaan. Kembali ke bawaan jika gagal. Menetapkan provider memaksa `mode: "safeguard"`. Lihat [Compaction](/id/concepts/compaction). -- `timeoutSeconds`: detik maksimum yang diizinkan untuk satu operasi compaction sebelum OpenClaw membatalkannya. Default: `900`. -- `identifierPolicy`: `strict` (default), `off`, atau `custom`. `strict` menambahkan panduan bawaan untuk mempertahankan identifier opaque selama peringkasan compaction. +- `mode`: `default` atau `safeguard` (ringkasan bertahap untuk riwayat panjang). Lihat [Compaction](/id/concepts/compaction). +- `provider`: ID plugin penyedia compaction yang terdaftar. Saat diatur, `summarize()` penyedia dipanggil alih-alih ringkasan LLM built-in. Fallback ke built-in saat gagal. Menetapkan penyedia memaksa `mode: "safeguard"`. Lihat [Compaction](/id/concepts/compaction). +- `timeoutSeconds`: jumlah detik maksimum yang diizinkan untuk satu operasi compaction sebelum OpenClaw membatalkannya. Default: `900`. +- `identifierPolicy`: `strict` (default), `off`, atau `custom`. `strict` menambahkan panduan retensi identifier opak built-in selama ringkasan compaction. - `identifierInstructions`: teks pelestarian identifier kustom opsional yang digunakan saat `identifierPolicy=custom`. -- `postCompactionSections`: nama bagian H2/H3 AGENTS.md opsional yang akan disuntik ulang setelah compaction. Default ke `["Session Startup", "Red Lines"]`; set `[]` untuk menonaktifkan penyuntikan ulang. Saat tidak diatur atau secara eksplisit diatur ke pasangan default itu, heading lama `Every Session`/`Safety` juga diterima sebagai fallback lama. -- `model`: override `provider/model-id` opsional hanya untuk peringkasan compaction. Gunakan ini saat session utama harus tetap memakai satu model tetapi ringkasan compaction harus berjalan di model lain; saat tidak diatur, compaction memakai model utama session. -- `notifyUser`: saat `true`, mengirim pemberitahuan singkat ke pengguna saat compaction dimulai (misalnya, "Compacting context..."). Dinonaktifkan secara default agar compaction tetap senyap. -- `memoryFlush`: giliran agent senyap sebelum auto-compaction untuk menyimpan memori yang tahan lama. Dilewati saat workspace read-only. +- `postCompactionSections`: nama bagian AGENTS.md H2/H3 opsional untuk disuntikkan ulang setelah compaction. Default ke `["Session Startup", "Red Lines"]`; tetapkan `[]` untuk menonaktifkan penyuntikan ulang. Saat tidak diatur atau secara eksplisit diatur ke pasangan default itu, heading lama `Every Session`/`Safety` juga diterima sebagai fallback legacy. +- `model`: override `provider/model-id` opsional hanya untuk ringkasan compaction. Gunakan ini saat sesi utama harus tetap memakai satu model tetapi ringkasan compaction harus berjalan pada model lain; saat tidak diatur, compaction menggunakan model utama sesi. +- `notifyUser`: saat `true`, mengirim pemberitahuan singkat kepada pengguna saat compaction dimulai (misalnya, "Compacting context..."). Dinonaktifkan secara default agar compaction tetap senyap. +- `memoryFlush`: giliran agentic senyap sebelum auto-compaction untuk menyimpan memori yang tahan lama. Dilewati saat workspace bersifat read-only. ### `agents.defaults.contextPruning` -Memangkas **hasil tool lama** dari konteks dalam memori sebelum dikirim ke LLM. **Tidak** memodifikasi riwayat session di disk. +Memangkas **hasil alat lama** dari konteks dalam memori sebelum dikirim ke LLM. Ini **tidak** memodifikasi riwayat sesi di disk. ```json5 { @@ -1207,7 +1246,7 @@ Memangkas **hasil tool lama** dari konteks dalam memori sebelum dikirim ke LLM. defaults: { contextPruning: { mode: "cache-ttl", // off | cache-ttl - ttl: "1h", // durasi (ms/s/m/h), unit default: menit + ttl: "1h", // duration (ms/s/m/h), default unit: minutes keepLastAssistants: 3, softTrimRatio: 0.3, hardClearRatio: 0.5, @@ -1223,25 +1262,25 @@ Memangkas **hasil tool lama** dari konteks dalam memori sebelum dikirim ke LLM. -- `mode: "cache-ttl"` mengaktifkan proses pruning. -- `ttl` mengontrol seberapa sering pruning dapat berjalan lagi (setelah sentuhan cache terakhir). -- Pruning mula-mula melakukan soft-trim pada hasil tool berukuran besar, lalu hard-clear hasil tool yang lebih lama jika diperlukan. +- `mode: "cache-ttl"` mengaktifkan pass pruning. +- `ttl` mengontrol seberapa sering pruning dapat dijalankan lagi (setelah sentuhan cache terakhir). +- Pruning terlebih dahulu melakukan soft-trim pada hasil alat yang terlalu besar, lalu hard-clear hasil alat yang lebih lama jika diperlukan. -**Soft-trim** mempertahankan awal + akhir dan menyisipkan `...` di tengah. +**Soft-trim** mempertahankan bagian awal + akhir dan menyisipkan `...` di tengah. -**Hard-clear** mengganti seluruh hasil tool dengan placeholder. +**Hard-clear** mengganti seluruh hasil alat dengan placeholder. Catatan: -- Blok gambar tidak pernah di-trim/diclear. -- Rasio berbasis karakter (perkiraan), bukan hitungan token yang tepat. -- Jika terdapat lebih sedikit dari `keepLastAssistants` pesan asisten, pruning dilewati. +- Blok gambar tidak pernah dipotong/dihapus. +- Rasio berbasis karakter (perkiraan), bukan jumlah token yang tepat. +- Jika jumlah pesan asisten kurang dari `keepLastAssistants`, pruning dilewati. Lihat [Session Pruning](/id/concepts/session-pruning) untuk detail perilaku. -### Block streaming +### Streaming blok ```json5 { @@ -1251,15 +1290,15 @@ Lihat [Session Pruning](/id/concepts/session-pruning) untuk detail perilaku. blockStreamingBreak: "text_end", // text_end | message_end blockStreamingChunk: { minChars: 800, maxChars: 1200 }, blockStreamingCoalesce: { idleMs: 1000 }, - humanDelay: { mode: "natural" }, // off | natural | custom (gunakan minMs/maxMs) + humanDelay: { mode: "natural" }, // off | natural | custom (use minMs/maxMs) }, }, } ``` - Channel non-Telegram memerlukan `*.blockStreaming: true` eksplisit untuk mengaktifkan balasan blok. -- Override channel: `channels..blockStreamingCoalesce` (dan varian per-akun). Signal/Slack/Discord/Google Chat default `minChars: 1500`. -- `humanDelay`: jeda acak di antara balasan blok. `natural` = 800–2500ms. Override per-agent: `agents.list[].humanDelay`. +- Override channel: `channels..blockStreamingCoalesce` (dan varian per akun). Signal/Slack/Discord/Google Chat default `minChars: 1500`. +- `humanDelay`: jeda acak antara balasan blok. `natural` = 800–2500ms. Override per agen: `agents.list[].humanDelay`. Lihat [Streaming](/id/concepts/streaming) untuk perilaku + detail chunking. @@ -1276,8 +1315,8 @@ Lihat [Streaming](/id/concepts/streaming) untuk perilaku + detail chunking. } ``` -- Default: `instant` untuk chat direct/mention, `message` untuk chat grup tanpa mention. -- Override per-session: `session.typingMode`, `session.typingIntervalSeconds`. +- Default: `instant` untuk chat langsung/mention, `message` untuk chat grup tanpa mention. +- Override per sesi: `session.typingMode`, `session.typingIntervalSeconds`. Lihat [Typing Indicators](/id/concepts/typing-indicators). @@ -1285,7 +1324,7 @@ Lihat [Typing Indicators](/id/concepts/typing-indicators). ### `agents.defaults.sandbox` -Sandboxing opsional untuk agent tersemat. Lihat [Sandboxing](/id/gateway/sandboxing) untuk panduan lengkap. +Sandboxing opsional untuk agen tertanam. Lihat [Sandboxing](/id/gateway/sandboxing) untuk panduan lengkap. ```json5 { @@ -1331,7 +1370,7 @@ Sandboxing opsional untuk agent tersemat. Lihat [Sandboxing](/id/gateway/sandbox identityFile: "~/.ssh/id_ed25519", certificateFile: "~/.ssh/id_ed25519-cert.pub", knownHostsFile: "~/.ssh/known_hosts", - // SecretRef / konten inline juga didukung: + // SecretRefs / inline contents also supported: // identityData: { source: "env", provider: "default", id: "SSH_IDENTITY" }, // certificateData: { source: "env", provider: "default", id: "SSH_CERTIFICATE" }, // knownHostsData: { source: "env", provider: "default", id: "SSH_KNOWN_HOSTS" }, @@ -1380,54 +1419,54 @@ Sandboxing opsional untuk agent tersemat. Lihat [Sandboxing](/id/gateway/sandbox } ``` - + **Backend:** - `docker`: runtime Docker lokal (default) -- `ssh`: runtime remote generik berbasis SSH +- `ssh`: runtime jarak jauh berbasis SSH generik - `openshell`: runtime OpenShell -Saat `backend: "openshell"` dipilih, pengaturan khusus runtime dipindahkan ke +Saat `backend: "openshell"` dipilih, pengaturan spesifik runtime dipindahkan ke `plugins.entries.openshell.config`. -**Config backend SSH:** +**Konfigurasi backend SSH:** - `target`: target SSH dalam bentuk `user@host[:port]` -- `command`: command klien SSH (default: `ssh`) -- `workspaceRoot`: root remote absolut yang digunakan untuk workspace per-scope -- `identityFile` / `certificateFile` / `knownHostsFile`: file lokal yang ada dan diteruskan ke OpenSSH -- `identityData` / `certificateData` / `knownHostsData`: konten inline atau SecretRef yang dimaterialisasi OpenClaw ke file sementara saat runtime +- `command`: perintah klien SSH (default: `ssh`) +- `workspaceRoot`: root jarak jauh absolut yang digunakan untuk workspace per scope +- `identityFile` / `certificateFile` / `knownHostsFile`: file lokal yang sudah ada yang diteruskan ke OpenSSH +- `identityData` / `certificateData` / `knownHostsData`: konten inline atau SecretRef yang diwujudkan OpenClaw menjadi file sementara saat runtime - `strictHostKeyChecking` / `updateHostKeys`: knob kebijakan host-key OpenSSH -**Urutan prioritas auth SSH:** +**Prioritas auth SSH:** - `identityData` menang atas `identityFile` - `certificateData` menang atas `certificateFile` - `knownHostsData` menang atas `knownHostsFile` -- Nilai `*Data` berbasis SecretRef di-resolve dari snapshot runtime secrets aktif sebelum session sandbox dimulai +- Nilai `*Data` berbasis SecretRef di-resolve dari snapshot runtime secrets aktif sebelum sesi sandbox dimulai **Perilaku backend SSH:** -- menanam workspace remote sekali setelah create atau recreate -- lalu mempertahankan workspace SSH remote sebagai kanonis -- merutekan `exec`, file tools, dan path media melalui SSH -- tidak menyinkronkan perubahan remote kembali ke host secara otomatis -- tidak mendukung kontainer browser sandbox +- men-seed workspace jarak jauh sekali setelah pembuatan atau pembuatan ulang +- lalu mempertahankan workspace SSH jarak jauh sebagai kanonis +- merutekan `exec`, alat file, dan path media melalui SSH +- tidak otomatis menyinkronkan perubahan jarak jauh kembali ke host +- tidak mendukung container browser sandbox **Akses workspace:** -- `none`: workspace sandbox per-scope di bawah `~/.openclaw/sandboxes` -- `ro`: workspace sandbox di `/workspace`, workspace agent di-mount read-only di `/agent` -- `rw`: workspace agent di-mount read/write di `/workspace` +- `none`: workspace sandbox per scope di bawah `~/.openclaw/sandboxes` +- `ro`: workspace sandbox di `/workspace`, workspace agen di-mount read-only di `/agent` +- `rw`: workspace agen di-mount baca/tulis di `/workspace` **Scope:** -- `session`: kontainer + workspace per-session -- `agent`: satu kontainer + workspace per agent (default) -- `shared`: kontainer dan workspace bersama (tanpa isolasi lintas session) +- `session`: container + workspace per sesi +- `agent`: satu container + workspace per agen (default) +- `shared`: container dan workspace bersama (tanpa isolasi lintas sesi) -**Config plugin OpenShell:** +**Konfigurasi plugin OpenShell:** ```json5 { @@ -1440,10 +1479,10 @@ Saat `backend: "openshell"` dipilih, pengaturan khusus runtime dipindahkan ke from: "openclaw", remoteWorkspaceDir: "/sandbox", remoteAgentWorkspaceDir: "/agent", - gateway: "lab", // opsional - gatewayEndpoint: "https://lab.example", // opsional - policy: "strict", // id kebijakan OpenShell opsional - providers: ["openai"], // opsional + gateway: "lab", // optional + gatewayEndpoint: "https://lab.example", // optional + policy: "strict", // optional OpenShell policy id + providers: ["openai"], // optional autoProviders: true, timeoutSeconds: 120, }, @@ -1455,30 +1494,30 @@ Saat `backend: "openshell"` dipilih, pengaturan khusus runtime dipindahkan ke **Mode OpenShell:** -- `mirror`: tanam remote dari lokal sebelum exec, sinkronkan balik setelah exec; workspace lokal tetap kanonis -- `remote`: tanam remote sekali saat sandbox dibuat, lalu pertahankan workspace remote sebagai kanonis +- `mirror`: seed remote dari lokal sebelum exec, sinkronkan kembali setelah exec; workspace lokal tetap kanonis +- `remote`: seed remote sekali saat sandbox dibuat, lalu pertahankan workspace jarak jauh sebagai kanonis -Dalam mode `remote`, edit lokal host yang dibuat di luar OpenClaw tidak disinkronkan ke sandbox secara otomatis setelah langkah seed. -Transport-nya menggunakan SSH ke sandbox OpenShell, tetapi plugin memiliki lifecycle sandbox dan sinkronisasi mirror opsional. +Dalam mode `remote`, edit host-lokal yang dibuat di luar OpenClaw tidak otomatis disinkronkan ke sandbox setelah langkah seed. +Transport menggunakan SSH ke sandbox OpenShell, tetapi plugin memiliki siklus hidup sandbox dan sinkronisasi mirror opsional. -**`setupCommand`** berjalan sekali setelah pembuatan kontainer (via `sh -lc`). Memerlukan egress jaringan, root yang dapat ditulis, pengguna root. +**`setupCommand`** dijalankan sekali setelah pembuatan container (melalui `sh -lc`). Memerlukan network egress, root yang dapat ditulis, pengguna root. -**Kontainer default ke `network: "none"`** — set ke `"bridge"` (atau custom bridge network) jika agent memerlukan akses keluar. -`"host"` diblokir. `"container:"` diblokir secara default kecuali Anda secara eksplisit menetapkan +**Container default ke `network: "none"`** — tetapkan ke `"bridge"` (atau jaringan bridge kustom) jika agen memerlukan akses keluar. +`"host"` diblokir. `"container:"` diblokir secara default kecuali Anda secara eksplisit mengatur `sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true` (break-glass). -**Lampiran masuk** dipentaskan ke `media/inbound/*` di workspace aktif. +**Lampiran masuk** ditempatkan ke `media/inbound/*` di workspace aktif. -**`docker.binds`** me-mount direktori host tambahan; bind global dan per-agent digabungkan. +**`docker.binds`** me-mount direktori host tambahan; bind global dan per agen digabungkan. -**Browser tersandbox** (`sandbox.browser.enabled`): Chromium + CDP di dalam kontainer. URL noVNC disuntikkan ke system prompt. Tidak memerlukan `browser.enabled` di `openclaw.json`. -Akses pengamat noVNC menggunakan auth VNC secara default dan OpenClaw mengeluarkan URL token jangka pendek (alih-alih mengekspos password dalam URL bersama). +**Browser tersandbox** (`sandbox.browser.enabled`): Chromium + CDP dalam container. URL noVNC disuntikkan ke system prompt. Tidak memerlukan `browser.enabled` di `openclaw.json`. +Akses pengamat noVNC menggunakan auth VNC secara default dan OpenClaw mengeluarkan URL token berumur pendek (alih-alih mengekspos password dalam URL bersama). -- `allowHostControl: false` (default) memblokir session tersandbox agar tidak menargetkan browser host. -- `network` default ke `openclaw-sandbox-browser` (dedicated bridge network). Set ke `bridge` hanya saat Anda benar-benar menginginkan konektivitas bridge global. -- `cdpSourceRange` secara opsional membatasi ingress CDP di tepi kontainer ke rentang CIDR (misalnya `172.21.0.1/32`). -- `sandbox.browser.binds` me-mount direktori host tambahan hanya ke kontainer browser sandbox. Saat diatur (termasuk `[]`), ini menggantikan `docker.binds` untuk kontainer browser. -- Default peluncuran ditetapkan di `scripts/sandbox-browser-entrypoint.sh` dan dituning untuk host kontainer: +- `allowHostControl: false` (default) memblokir sesi tersandbox untuk menargetkan browser host. +- `network` default ke `openclaw-sandbox-browser` (jaringan bridge khusus). Tetapkan ke `bridge` hanya saat Anda secara eksplisit menginginkan konektivitas bridge global. +- `cdpSourceRange` secara opsional membatasi ingress CDP di tepi container ke rentang CIDR (misalnya `172.21.0.1/32`). +- `sandbox.browser.binds` me-mount direktori host tambahan hanya ke container browser sandbox. Saat diatur (termasuk `[]`), nilainya menggantikan `docker.binds` untuk container browser. +- Default peluncuran didefinisikan di `scripts/sandbox-browser-entrypoint.sh` dan disetel untuk host container: - `--remote-debugging-address=127.0.0.1` - `--remote-debugging-port=` - `--user-data-dir=${HOME}/.chrome` @@ -1499,27 +1538,26 @@ Akses pengamat noVNC menggunakan auth VNC secara default dan OpenClaw mengeluark - `--disable-3d-apis`, `--disable-software-rasterizer`, dan `--disable-gpu` aktif secara default dan dapat dinonaktifkan dengan `OPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0` jika penggunaan WebGL/3D memerlukannya. - - `OPENCLAW_BROWSER_DISABLE_EXTENSIONS=0` mengaktifkan kembali extensions jika alur kerja Anda + - `OPENCLAW_BROWSER_DISABLE_EXTENSIONS=0` mengaktifkan kembali ekstensi jika alur kerja Anda bergantung padanya. - `--renderer-process-limit=2` dapat diubah dengan - `OPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=`; set `0` untuk memakai + `OPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=`; tetapkan `0` untuk menggunakan batas proses default Chromium. - plus `--no-sandbox` dan `--disable-setuid-sandbox` saat `noSandbox` diaktifkan. - - Default adalah baseline image kontainer; gunakan custom browser image dengan custom - entrypoint untuk mengubah default kontainer. + - Default adalah baseline image container; gunakan image browser kustom dengan entrypoint kustom untuk mengubah default container. -Sandbox browser dan `sandbox.docker.binds` saat ini hanya untuk Docker. +Sandbox browser dan `sandbox.docker.binds` saat ini hanya didukung Docker. -Build image: +Bangun image: ```bash -scripts/sandbox-setup.sh # image sandbox utama -scripts/sandbox-browser-setup.sh # image browser opsional +scripts/sandbox-setup.sh # main sandbox image +scripts/sandbox-browser-setup.sh # optional browser image ``` -### `agents.list` (override per-agent) +### `agents.list` (override per agen) ```json5 { @@ -1531,12 +1569,12 @@ scripts/sandbox-browser-setup.sh # image browser opsional name: "Main Agent", workspace: "~/.openclaw/workspace", agentDir: "~/.openclaw/agents/main/agent", - model: "anthropic/claude-opus-4-6", // atau { primary, fallbacks } - thinkingDefault: "high", // override level thinking per-agent - reasoningDefault: "on", // override visibilitas reasoning per-agent - fastModeDefault: false, // override fast mode per-agent - params: { cacheRetention: "none" }, // meng-override defaults.models params yang cocok per kunci - skills: ["docs-search"], // menggantikan agents.defaults.skills saat diatur + model: "anthropic/claude-opus-4-6", // or { primary, fallbacks } + thinkingDefault: "high", // per-agent thinking level override + reasoningDefault: "on", // per-agent reasoning visibility override + fastModeDefault: false, // per-agent fast mode override + params: { cacheRetention: "none" }, // overrides matching defaults.models params by key + skills: ["docs-search"], // replaces agents.defaults.skills when set identity: { name: "Samantha", theme: "helpful sloth", @@ -1567,26 +1605,26 @@ scripts/sandbox-browser-setup.sh # image browser opsional } ``` -- `id`: id agent stabil (wajib). -- `default`: saat beberapa diatur, yang pertama menang (peringatan dicatat). Jika tidak ada yang diatur, entri list pertama menjadi default. -- `model`: bentuk string hanya meng-override `primary`; bentuk objek `{ primary, fallbacks }` meng-override keduanya (`[]` menonaktifkan fallback global). Job cron yang hanya meng-override `primary` tetap mewarisi fallback default kecuali Anda menetapkan `fallbacks: []`. -- `params`: stream params per-agent yang digabungkan di atas entri model terpilih dalam `agents.defaults.models`. Gunakan ini untuk override khusus agent seperti `cacheRetention`, `temperature`, atau `maxTokens` tanpa menduplikasi seluruh katalog model. -- `skills`: allowlist Skills per-agent opsional. Jika dihilangkan, agent mewarisi `agents.defaults.skills` bila diatur; daftar eksplisit menggantikan default alih-alih digabung, dan `[]` berarti tanpa skills. -- `thinkingDefault`: default level thinking per-agent opsional (`off | minimal | low | medium | high | xhigh | adaptive`). Meng-override `agents.defaults.thinkingDefault` untuk agent ini saat tidak ada override per-message atau session. -- `reasoningDefault`: default visibilitas reasoning per-agent opsional (`on | off | stream`). Berlaku saat tidak ada override reasoning per-message atau session. -- `fastModeDefault`: default fast mode per-agent opsional (`true | false`). Berlaku saat tidak ada override fast-mode per-message atau session. -- `runtime`: descriptor runtime per-agent opsional. Gunakan `type: "acp"` dengan default `runtime.acp` (`agent`, `backend`, `mode`, `cwd`) saat agent harus default ke session harness ACP. +- `id`: ID agen stabil (wajib). +- `default`: saat ada beberapa yang diatur, yang pertama menang (peringatan dicatat). Jika tidak ada yang diatur, entri daftar pertama menjadi default. +- `model`: bentuk string menimpa hanya `primary`; bentuk objek `{ primary, fallbacks }` menimpa keduanya (`[]` menonaktifkan fallback global). Job cron yang hanya menimpa `primary` tetap mewarisi fallback default kecuali Anda menetapkan `fallbacks: []`. +- `params`: param stream per agen yang digabungkan di atas entri model terpilih dalam `agents.defaults.models`. Gunakan ini untuk override spesifik agen seperti `cacheRetention`, `temperature`, atau `maxTokens` tanpa menduplikasi seluruh katalog model. +- `skills`: allowlist skill per agen opsional. Jika dihilangkan, agen mewarisi `agents.defaults.skills` saat diatur; daftar eksplisit menggantikan default alih-alih menggabungkannya, dan `[]` berarti tanpa skill. +- `thinkingDefault`: default level thinking per agen opsional (`off | minimal | low | medium | high | xhigh | adaptive`). Menimpa `agents.defaults.thinkingDefault` untuk agen ini saat tidak ada override per pesan atau per sesi. +- `reasoningDefault`: default visibilitas reasoning per agen opsional (`on | off | stream`). Berlaku saat tidak ada override reasoning per pesan atau per sesi. +- `fastModeDefault`: default per agen opsional untuk fast mode (`true | false`). Berlaku saat tidak ada override fast-mode per pesan atau per sesi. +- `runtime`: deskriptor runtime per agen opsional. Gunakan `type: "acp"` dengan default `runtime.acp` (`agent`, `backend`, `mode`, `cwd`) saat agen harus default ke sesi harness ACP. - `identity.avatar`: path relatif workspace, URL `http(s)`, atau URI `data:`. -- `identity` menurunkan default: `ackReaction` dari `emoji`, `mentionPatterns` dari `name`/`emoji`. -- `subagents.allowAgents`: allowlist id agent untuk `sessions_spawn` (`["*"]` = apa saja; default: hanya agent yang sama). -- Guard pewarisan sandbox: jika session peminta tersandbox, `sessions_spawn` menolak target yang akan berjalan tanpa sandbox. -- `subagents.requireAgentId`: saat true, blokir pemanggilan `sessions_spawn` yang menghilangkan `agentId` (memaksa pemilihan profil eksplisit; default: false). +- `identity` memperoleh default: `ackReaction` dari `emoji`, `mentionPatterns` dari `name`/`emoji`. +- `subagents.allowAgents`: allowlist ID agen untuk `sessions_spawn` (`["*"]` = apa pun; default: hanya agen yang sama). +- Pengaman pewarisan sandbox: jika sesi peminta disandbox, `sessions_spawn` menolak target yang akan berjalan tanpa sandbox. +- `subagents.requireAgentId`: saat true, blokir panggilan `sessions_spawn` yang menghilangkan `agentId` (memaksa pemilihan profil eksplisit; default: false). --- -## Routing multi-agent +## Perutean multi-agen -Jalankan beberapa agent terisolasi dalam satu Gateway. Lihat [Multi-Agent](/id/concepts/multi-agent). +Jalankan banyak agen terisolasi di dalam satu Gateway. Lihat [Multi-Agent](/id/concepts/multi-agent). ```json5 { @@ -1603,29 +1641,29 @@ Jalankan beberapa agent terisolasi dalam satu Gateway. Lihat [Multi-Agent](/id/c } ``` -### Field kecocokan binding +### Bidang pencocokan binding -- `type` (opsional): `route` untuk routing normal (type yang hilang default ke route), `acp` untuk binding percakapan ACP persisten. +- `type` (opsional): `route` untuk perutean normal (type yang hilang default ke route), `acp` untuk binding percakapan ACP persisten. - `match.channel` (wajib) -- `match.accountId` (opsional; `*` = akun apa saja; dihilangkan = akun default) +- `match.accountId` (opsional; `*` = akun apa pun; dihilangkan = akun default) - `match.peer` (opsional; `{ kind: direct|group|channel, id }`) - `match.guildId` / `match.teamId` (opsional; spesifik channel) - `acp` (opsional; hanya untuk entri `type: "acp"`): `{ mode, label, cwd, backend }` -**Urutan kecocokan deterministik:** +**Urutan pencocokan deterministik:** 1. `match.peer` 2. `match.guildId` 3. `match.teamId` -4. `match.accountId` (exact, tanpa peer/guild/team) -5. `match.accountId: "*"` (seluruh channel) -6. Agent default +4. `match.accountId` (tepat, tanpa peer/guild/team) +5. `match.accountId: "*"` (cakupan seluruh channel) +6. Agen default -Di dalam setiap tier, entri `bindings` pertama yang cocok akan menang. +Di dalam setiap tingkat, entri `bindings` yang pertama cocok akan menang. -Untuk entri `type: "acp"`, OpenClaw me-resolve berdasarkan identitas percakapan exact (`match.channel` + akun + `match.peer.id`) dan tidak menggunakan urutan tier route binding di atas. +Untuk entri `type: "acp"`, OpenClaw me-resolve berdasarkan identitas percakapan yang tepat (`match.channel` + akun + `match.peer.id`) dan tidak menggunakan urutan tingkat route binding di atas. -### Profil akses per-agent +### Profil akses per agen @@ -1645,7 +1683,7 @@ Untuk entri `type: "acp"`, OpenClaw me-resolve berdasarkan identitas percakapan - + ```json5 { @@ -1720,11 +1758,11 @@ Untuk entri `type: "acp"`, OpenClaw me-resolve berdasarkan identitas percakapan -Lihat [Multi-Agent Sandbox & Tools](/id/tools/multi-agent-sandbox-tools) untuk detail prioritas. +Lihat [Sandbox & Tools Multi-Agent](/id/tools/multi-agent-sandbox-tools) untuk detail prioritas. --- -## Session +## Sesi ```json5 { @@ -1746,22 +1784,22 @@ Lihat [Multi-Agent Sandbox & Tools](/id/tools/multi-agent-sandbox-tools) untuk d }, resetTriggers: ["/new", "/reset"], store: "~/.openclaw/agents/{agentId}/sessions/sessions.json", - parentForkMaxTokens: 100000, // lewati fork parent-thread di atas jumlah token ini (0 menonaktifkan) + parentForkMaxTokens: 100000, // skip parent-thread fork above this token count (0 disables) maintenance: { mode: "warn", // warn | enforce pruneAfter: "30d", maxEntries: 500, rotateBytes: "10mb", - resetArchiveRetention: "30d", // durasi atau false - maxDiskBytes: "500mb", // keras opsional untuk anggaran - highWaterBytes: "400mb", // target pembersihan opsional + resetArchiveRetention: "30d", // duration or false + maxDiskBytes: "500mb", // optional hard budget + highWaterBytes: "400mb", // optional cleanup target }, threadBindings: { enabled: true, - idleHours: 24, // auto-unfocus karena tidak aktif default dalam jam (`0` menonaktifkan) - maxAgeHours: 0, // usia maksimum keras default dalam jam (`0` menonaktifkan) + idleHours: 24, // default inactivity auto-unfocus in hours (`0` disables) + maxAgeHours: 0, // default hard max age in hours (`0` disables) }, - mainKey: "main", // lama (runtime selalu menggunakan "main") + mainKey: "main", // legacy (runtime always uses "main") agentToAgent: { maxPingPongTurns: 5 }, sendPolicy: { rules: [{ action: "deny", match: { channel: "discord", chatType: "group" } }], @@ -1771,37 +1809,37 @@ Lihat [Multi-Agent Sandbox & Tools](/id/tools/multi-agent-sandbox-tools) untuk d } ``` - + -- **`scope`**: strategi pengelompokan session dasar untuk konteks chat grup. - - `per-sender` (default): setiap pengirim mendapat session terisolasi dalam konteks channel. - - `global`: semua peserta dalam konteks channel berbagi satu session (gunakan hanya bila konteks bersama memang diinginkan). +- **`scope`**: strategi pengelompokan sesi dasar untuk konteks chat grup. + - `per-sender` (default): setiap pengirim mendapat sesi terisolasi dalam konteks channel. + - `global`: semua peserta dalam konteks channel berbagi satu sesi (gunakan hanya saat konteks bersama memang dimaksudkan). - **`dmScope`**: bagaimana DM dikelompokkan. - - `main`: semua DM berbagi session utama. - - `per-peer`: isolasi berdasarkan id pengirim lintas channel. - - `per-channel-peer`: isolasi per channel + pengirim (direkomendasikan untuk inbox multi-pengguna). - - `per-account-channel-peer`: isolasi per akun + channel + pengirim (direkomendasikan untuk multi-akun). -- **`identityLinks`**: peta id kanonis ke peer berawalan provider untuk berbagi session lintas channel. + - `main`: semua DM berbagi sesi utama. + - `per-peer`: isolasi berdasarkan ID pengirim lintas channel. + - `per-channel-peer`: isolasi per channel + pengirim (disarankan untuk inbox multi-pengguna). + - `per-account-channel-peer`: isolasi per akun + channel + pengirim (disarankan untuk multi-akun). +- **`identityLinks`**: petakan ID kanonis ke peer berprefiks penyedia untuk berbagi sesi lintas channel. - **`reset`**: kebijakan reset utama. `daily` mereset pada `atHour` waktu lokal; `idle` mereset setelah `idleMinutes`. Saat keduanya dikonfigurasi, yang kedaluwarsa lebih dulu yang menang. -- **`resetByType`**: override per-jenis (`direct`, `group`, `thread`). `dm` lama diterima sebagai alias `direct`. -- **`parentForkMaxTokens`**: `totalTokens` session induk maksimum yang diizinkan saat membuat session thread bercabang (default `100000`). - - Jika `totalTokens` induk di atas nilai ini, OpenClaw memulai session thread baru alih-alih mewarisi riwayat transkrip induk. - - Set `0` untuk menonaktifkan guard ini dan selalu mengizinkan fork induk. -- **`mainKey`**: field lama. Runtime sekarang selalu menggunakan `"main"` untuk bucket chat direct utama. -- **`agentToAgent.maxPingPongTurns`**: jumlah maksimum giliran balas-balik antara agent selama pertukaran antar-agent (integer, rentang: `0`–`5`). `0` menonaktifkan rantai ping-pong. -- **`sendPolicy`**: cocokkan berdasarkan `channel`, `chatType` (`direct|group|channel`, dengan alias lama `dm`), `keyPrefix`, atau `rawKeyPrefix`. Deny pertama menang. +- **`resetByType`**: override per tipe (`direct`, `group`, `thread`). `dm` lama diterima sebagai alias untuk `direct`. +- **`parentForkMaxTokens`**: maksimum `totalTokens` sesi induk yang diizinkan saat membuat sesi thread bercabang (default `100000`). + - Jika `totalTokens` induk di atas nilai ini, OpenClaw memulai sesi thread baru alih-alih mewarisi riwayat transkrip induk. + - Tetapkan `0` untuk menonaktifkan pengaman ini dan selalu mengizinkan parent forking. +- **`mainKey`**: bidang lama. Runtime kini selalu menggunakan `"main"` untuk bucket chat langsung utama. +- **`agentToAgent.maxPingPongTurns`**: jumlah giliran balas-balik maksimum antar agen selama pertukaran agen-ke-agen (integer, rentang: `0`–`5`). `0` menonaktifkan rantai ping-pong. +- **`sendPolicy`**: cocokkan berdasarkan `channel`, `chatType` (`direct|group|channel`, dengan alias lama `dm`), `keyPrefix`, atau `rawKeyPrefix`. Penolakan pertama menang. - **`maintenance`**: kontrol pembersihan + retensi session-store. - `mode`: `warn` hanya mengeluarkan peringatan; `enforce` menerapkan pembersihan. - `pruneAfter`: batas usia untuk entri usang (default `30d`). - `maxEntries`: jumlah maksimum entri dalam `sessions.json` (default `500`). - - `rotateBytes`: rotasikan `sessions.json` saat melebihi ukuran ini (default `10mb`). - - `resetArchiveRetention`: retensi untuk arsip transkrip `*.reset.`. Default ke `pruneAfter`; set `false` untuk menonaktifkan. - - `maxDiskBytes`: anggaran disk direktori session opsional. Dalam mode `warn` ia mencatat peringatan; dalam mode `enforce` ia menghapus artefak/session tertua terlebih dahulu. + - `rotateBytes`: rotasi `sessions.json` saat melebihi ukuran ini (default `10mb`). + - `resetArchiveRetention`: retensi untuk arsip transkrip `*.reset.`. Default ke `pruneAfter`; tetapkan `false` untuk menonaktifkan. + - `maxDiskBytes`: anggaran disk direktori sesi opsional. Dalam mode `warn`, mencatat peringatan; dalam mode `enforce`, menghapus artefak/sesi tertua terlebih dahulu. - `highWaterBytes`: target opsional setelah pembersihan anggaran. Default ke `80%` dari `maxDiskBytes`. -- **`threadBindings`**: default global untuk fitur session terikat thread. - - `enabled`: sakelar default utama (provider dapat meng-override; Discord menggunakan `channels.discord.threadBindings.enabled`) - - `idleHours`: auto-unfocus karena tidak aktif default dalam jam (`0` menonaktifkan; provider dapat meng-override) - - `maxAgeHours`: usia maksimum keras default dalam jam (`0` menonaktifkan; provider dapat meng-override) +- **`threadBindings`**: default global untuk fitur sesi terikat thread. + - `enabled`: sakelar default utama (penyedia dapat menimpa; Discord menggunakan `channels.discord.threadBindings.enabled`) + - `idleHours`: default auto-unfocus karena tidak aktif dalam jam (`0` menonaktifkan; penyedia dapat menimpa) + - `maxAgeHours`: default usia maksimum keras dalam jam (`0` menonaktifkan; penyedia dapat menimpa) @@ -1812,7 +1850,7 @@ Lihat [Multi-Agent Sandbox & Tools](/id/tools/multi-agent-sandbox-tools) untuk d ```json5 { messages: { - responsePrefix: "🦞", // atau "auto" + responsePrefix: "🦞", // or "auto" ackReaction: "👀", ackReactionScope: "group-mentions", // group-mentions | group-all | direct | all removeAckAfterReply: false, @@ -1827,7 +1865,7 @@ Lihat [Multi-Agent Sandbox & Tools](/id/tools/multi-agent-sandbox-tools) untuk d }, }, inbound: { - debounceMs: 2000, // 0 menonaktifkan + debounceMs: 2000, // 0 disables byChannel: { whatsapp: 5000, slack: 1500, @@ -1837,38 +1875,38 @@ Lihat [Multi-Agent Sandbox & Tools](/id/tools/multi-agent-sandbox-tools) untuk d } ``` -### Prefix respons +### Prefiks respons -Override per-channel/akun: `channels..responsePrefix`, `channels..accounts..responsePrefix`. +Override per channel/akun: `channels..responsePrefix`, `channels..accounts..responsePrefix`. -Resolusi (yang paling spesifik menang): akun → channel → global. `""` menonaktifkan dan menghentikan kaskade. `"auto"` menurunkan `[{identity.name}]`. +Resolusi (yang paling spesifik menang): akun → channel → global. `""` menonaktifkan dan menghentikan cascade. `"auto"` menurunkan `[{identity.name}]`. -**Variabel template:** +**Variabel templat:** | Variabel | Deskripsi | Contoh | | ----------------- | --------------------- | --------------------------- | | `{model}` | Nama model singkat | `claude-opus-4-6` | -| `{modelFull}` | Identifier model penuh| `anthropic/claude-opus-4-6` | -| `{provider}` | Nama provider | `anthropic` | +| `{modelFull}` | Identifier model lengkap | `anthropic/claude-opus-4-6` | +| `{provider}` | Nama penyedia | `anthropic` | | `{thinkingLevel}` | Level thinking saat ini | `high`, `low`, `off` | -| `{identity.name}` | Nama identitas agent | (sama seperti `"auto"`) | +| `{identity.name}` | Nama identitas agen | (sama seperti `"auto"`) | -Variabel tidak peka huruf besar-kecil. `{think}` adalah alias untuk `{thinkingLevel}`. +Variabel tidak peka huruf besar/kecil. `{think}` adalah alias untuk `{thinkingLevel}`. ### Reaksi ack -- Default ke `identity.emoji` milik agent aktif, jika tidak `"👀"`. Set `""` untuk menonaktifkan. -- Override per-channel: `channels..ackReaction`, `channels..accounts..ackReaction`. +- Default ke `identity.emoji` agen aktif, jika tidak `"👀"`. Tetapkan `""` untuk menonaktifkan. +- Override per channel: `channels..ackReaction`, `channels..accounts..ackReaction`. - Urutan resolusi: akun → channel → `messages.ackReaction` → fallback identitas. - Scope: `group-mentions` (default), `group-all`, `direct`, `all`. -- `removeAckAfterReply`: menghapus ack setelah balasan pada Slack, Discord, dan Telegram. -- `messages.statusReactions.enabled`: mengaktifkan reaksi status lifecycle pada Slack, Discord, dan Telegram. - Pada Slack dan Discord, bila tidak diatur maka reaksi status tetap aktif saat reaksi ack aktif. - Pada Telegram, atur secara eksplisit ke `true` untuk mengaktifkan reaksi status lifecycle. +- `removeAckAfterReply`: menghapus ack setelah balasan di Slack, Discord, dan Telegram. +- `messages.statusReactions.enabled`: mengaktifkan reaksi status siklus hidup di Slack, Discord, dan Telegram. + Di Slack dan Discord, jika tidak diatur status reactions tetap aktif saat ack reaction aktif. + Di Telegram, atur secara eksplisit ke `true` untuk mengaktifkan status reactions siklus hidup. ### Debounce masuk -Mengelompokkan pesan teks cepat dari pengirim yang sama menjadi satu giliran agent. Media/lampiran akan langsung flush. Command kontrol melewati debouncing. +Mengelompokkan pesan cepat yang hanya berisi teks dari pengirim yang sama menjadi satu giliran agen. Media/lampiran langsung mem-flush. Perintah kontrol melewati debouncing. ### TTS (text-to-speech) @@ -1911,12 +1949,12 @@ Mengelompokkan pesan teks cepat dari pengirim yang sama menjadi satu giliran age } ``` -- `auto` mengontrol auto-TTS. `/tts off|always|inbound|tagged` meng-override per session. -- `summaryModel` meng-override `agents.defaults.model.primary` untuk auto-summary. +- `auto` mengontrol mode auto-TTS default: `off`, `always`, `inbound`, atau `tagged`. `/tts on|off` dapat menimpa preferensi lokal, dan `/tts status` menampilkan status efektif. +- `summaryModel` menimpa `agents.defaults.model.primary` untuk auto-summary. - `modelOverrides` aktif secara default; `modelOverrides.allowProvider` default ke `false` (opt-in). -- API key menggunakan `ELEVENLABS_API_KEY`/`XI_API_KEY` dan `OPENAI_API_KEY` sebagai fallback. -- `openai.baseUrl` meng-override endpoint OpenAI TTS. Urutan resolusinya adalah config, lalu `OPENAI_TTS_BASE_URL`, lalu `https://api.openai.com/v1`. -- Saat `openai.baseUrl` menunjuk ke endpoint non-OpenAI, OpenClaw memperlakukannya sebagai server TTS kompatibel OpenAI dan melonggarkan validasi model/voice. +- API key fallback ke `ELEVENLABS_API_KEY`/`XI_API_KEY` dan `OPENAI_API_KEY`. +- `openai.baseUrl` menimpa endpoint OpenAI TTS. Urutan resolusi adalah konfigurasi, lalu `OPENAI_TTS_BASE_URL`, lalu `https://api.openai.com/v1`. +- Saat `openai.baseUrl` menunjuk ke endpoint non-OpenAI, OpenClaw memperlakukannya sebagai server TTS yang kompatibel dengan OpenAI dan melonggarkan validasi model/voice. --- @@ -1946,36 +1984,36 @@ Default untuk mode Talk (macOS/iOS/Android). } ``` -- `talk.provider` harus cocok dengan kunci di `talk.providers` saat beberapa provider Talk dikonfigurasi. -- Kunci Talk flat lama (`talk.voiceId`, `talk.voiceAliases`, `talk.modelId`, `talk.outputFormat`, `talk.apiKey`) hanya untuk kompatibilitas dan dimigrasikan otomatis ke `talk.providers.`. -- Voice ID menggunakan `ELEVENLABS_VOICE_ID` atau `SAG_VOICE_ID` sebagai fallback. +- `talk.provider` harus cocok dengan kunci dalam `talk.providers` saat beberapa penyedia Talk dikonfigurasi. +- Kunci Talk datar lama (`talk.voiceId`, `talk.voiceAliases`, `talk.modelId`, `talk.outputFormat`, `talk.apiKey`) hanya untuk kompatibilitas dan dimigrasikan otomatis ke `talk.providers.`. +- Voice ID fallback ke `ELEVENLABS_VOICE_ID` atau `SAG_VOICE_ID`. - `providers.*.apiKey` menerima string plaintext atau objek SecretRef. - Fallback `ELEVENLABS_API_KEY` hanya berlaku saat tidak ada API key Talk yang dikonfigurasi. - `providers.*.voiceAliases` memungkinkan directive Talk menggunakan nama yang ramah. -- `silenceTimeoutMs` mengontrol berapa lama mode Talk menunggu setelah pengguna diam sebelum mengirim transkrip. Jika tidak diatur, jendela jeda default platform tetap dipakai (`700 ms di macOS dan Android, 900 ms di iOS`). +- `silenceTimeoutMs` mengontrol berapa lama mode Talk menunggu setelah pengguna diam sebelum mengirim transkrip. Jika tidak diatur, jendela jeda default platform dipertahankan (`700 ms di macOS dan Android, 900 ms di iOS`). --- -## Tool +## Alat -### Profil tool +### Profil alat `tools.profile` menetapkan allowlist dasar sebelum `tools.allow`/`tools.deny`: -Onboarding lokal secara default menetapkan config lokal baru ke `tools.profile: "coding"` saat tidak diatur (profil eksplisit yang sudah ada dipertahankan). +Onboarding lokal secara default mengatur konfigurasi lokal baru ke `tools.profile: "coding"` saat tidak diatur (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 diatur) | +| `full` | Tanpa pembatasan (sama seperti tidak diatur) | -### Grup tool +### Grup alat -| Grup | Tool | +| 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` | @@ -1986,11 +2024,11 @@ Onboarding lokal secara default menetapkan config lokal baru ke `tools.profile: | `group:nodes` | `nodes` | | `group:agents` | `agents_list` | | `group:media` | `image`, `image_generate`, `video_generate`, `tts` | -| `group:openclaw` | Semua tool bawaan (tidak termasuk plugin provider) | +| `group:openclaw` | Semua alat built-in (tidak termasuk plugin penyedia) | ### `tools.allow` / `tools.deny` -Kebijakan allow/deny tool global (deny menang). Tidak peka huruf besar-kecil, mendukung wildcard `*`. Diterapkan bahkan saat sandbox Docker dimatikan. +Kebijakan allow/deny alat global (deny menang). Tidak peka huruf besar/kecil, mendukung wildcard `*`. Diterapkan bahkan saat sandbox Docker mati. ```json5 { @@ -2000,7 +2038,7 @@ Kebijakan allow/deny tool global (deny menang). Tidak peka huruf besar-kecil, me ### `tools.byProvider` -Batasi tool lebih lanjut untuk provider atau model tertentu. Urutan: profil dasar → profil provider → allow/deny. +Lebih lanjut membatasi alat untuk penyedia atau model tertentu. Urutan: profil dasar → profil penyedia → allow/deny. ```json5 { @@ -2032,9 +2070,9 @@ Mengontrol akses exec elevated di luar sandbox: } ``` -- Override per-agent (`agents.list[].tools.elevated`) hanya dapat membatasi lebih lanjut. -- `/elevated on|off|ask|full` menyimpan status per session; directive inline berlaku untuk satu pesan. -- `exec` elevated melewati sandboxing dan menggunakan jalur keluar yang dikonfigurasi (`gateway` secara default, atau `node` saat target exec adalah `node`). +- Override per agen (`agents.list[].tools.elevated`) hanya dapat membatasi lebih lanjut. +- `/elevated on|off|ask|full` menyimpan status per sesi; directive inline berlaku untuk satu pesan. +- `exec` elevated melewati sandboxing dan menggunakan jalur escape yang dikonfigurasi (`gateway` secara default, atau `node` saat target exec adalah `node`). ### `tools.exec` @@ -2058,8 +2096,8 @@ Mengontrol akses exec elevated di luar sandbox: ### `tools.loopDetection` -Pemeriksaan keamanan loop tool **dinonaktifkan secara default**. Set `enabled: true` untuk mengaktifkan deteksi. -Pengaturan dapat didefinisikan secara global di `tools.loopDetection` dan dioverride per-agent di `agents.list[].tools.loopDetection`. +Pemeriksaan keamanan loop alat **dinonaktifkan secara default**. Tetapkan `enabled: true` untuk mengaktifkan deteksi. +Pengaturan dapat didefinisikan secara global di `tools.loopDetection` dan ditimpa per agen di `agents.list[].tools.loopDetection`. ```json5 { @@ -2080,13 +2118,13 @@ Pengaturan dapat didefinisikan secara global di `tools.loopDetection` dan diover } ``` -- `historySize`: riwayat tool-call maksimum yang disimpan untuk analisis loop. +- `historySize`: riwayat panggilan alat maksimum yang dipertahankan untuk analisis loop. - `warningThreshold`: ambang pola berulang tanpa progres untuk peringatan. -- `criticalThreshold`: ambang pengulangan lebih tinggi untuk memblokir loop kritis. -- `globalCircuitBreakerThreshold`: ambang hard stop untuk setiap proses tanpa progres. -- `detectors.genericRepeat`: peringatkan saat panggilan same-tool/same-args berulang. -- `detectors.knownPollNoProgress`: peringatkan/blokir pada tool polling yang diketahui (`process.poll`, `command_status`, dll.). -- `detectors.pingPong`: peringatkan/blokir pada pola pasangan bolak-balik tanpa progres. +- `criticalThreshold`: ambang berulang yang lebih tinggi untuk memblokir loop kritis. +- `globalCircuitBreakerThreshold`: ambang hard stop untuk run tanpa progres apa pun. +- `detectors.genericRepeat`: beri peringatan pada panggilan alat yang sama dengan argumen yang sama secara berulang. +- `detectors.knownPollNoProgress`: beri peringatan/blokir pada alat poll yang dikenal (`process.poll`, `command_status`, dll.). +- `detectors.pingPong`: beri peringatan/blokir pada pola pasangan bergantian tanpa progres. - Jika `warningThreshold >= criticalThreshold` atau `criticalThreshold >= globalCircuitBreakerThreshold`, validasi gagal. ### `tools.web` @@ -2097,14 +2135,14 @@ Pengaturan dapat didefinisikan secara global di `tools.loopDetection` dan diover web: { search: { enabled: true, - apiKey: "brave_api_key", // atau env BRAVE_API_KEY + apiKey: "brave_api_key", // or BRAVE_API_KEY env maxResults: 5, timeoutSeconds: 30, cacheTtlMinutes: 15, }, fetch: { enabled: true, - provider: "firecrawl", // opsional; hilangkan untuk auto-detect + provider: "firecrawl", // optional; omit for auto-detect maxChars: 50000, maxCharsCap: 50000, maxResponseBytes: 2000000, @@ -2129,7 +2167,7 @@ Mengonfigurasi pemahaman media masuk (gambar/audio/video): media: { concurrency: 2, asyncCompletion: { - directSend: false, // opt-in: kirim musik/video async yang selesai langsung ke channel + directSend: false, // opt-in: send finished async music/video directly to the channel }, audio: { enabled: true, @@ -2153,32 +2191,32 @@ Mengonfigurasi pemahaman media masuk (gambar/audio/video): } ``` - + **Entri provider** (`type: "provider"` atau dihilangkan): -- `provider`: id provider API (`openai`, `anthropic`, `google`/`gemini`, `groq`, dll.) -- `model`: override model id +- `provider`: ID penyedia API (`openai`, `anthropic`, `google`/`gemini`, `groq`, dll.) +- `model`: override ID model - `profile` / `preferredProfile`: pemilihan profil `auth-profiles.json` **Entri CLI** (`type: "cli"`): - `command`: executable yang akan dijalankan -- `args`: argumen bertemplate (mendukung `{{MediaPath}}`, `{{Prompt}}`, `{{MaxChars}}`, dll.) +- `args`: argumen bertemplat (mendukung `{{MediaPath}}`, `{{Prompt}}`, `{{MaxChars}}`, dll.) -**Field umum:** +**Bidang umum:** - `capabilities`: daftar opsional (`image`, `audio`, `video`). Default: `openai`/`anthropic`/`minimax` → image, `google` → image+audio+video, `groq` → audio. -- `prompt`, `maxChars`, `maxBytes`, `timeoutSeconds`, `language`: override per-entri. -- Kegagalan akan beralih ke entri berikutnya. +- `prompt`, `maxChars`, `maxBytes`, `timeoutSeconds`, `language`: override per entri. +- Kegagalan akan fallback ke entri berikutnya. -Auth provider mengikuti urutan standar: `auth-profiles.json` → env vars → `models.providers.*.apiKey`. +Auth penyedia mengikuti urutan standar: `auth-profiles.json` → env vars → `models.providers.*.apiKey`. -**Field penyelesaian async:** +**Bidang async completion:** -- `asyncCompletion.directSend`: saat `true`, tugas `music_generate` - dan `video_generate` async yang selesai mencoba pengiriman channel langsung terlebih dahulu. Default: `false` - (jalur lama pembangkitan requester-session/model-delivery). +- `asyncCompletion.directSend`: saat `true`, tugas async `music_generate` + dan `video_generate` yang selesai mencoba pengiriman channel langsung terlebih dahulu. Default: `false` + (jalur lama requester-session wake/model-delivery). @@ -2197,9 +2235,9 @@ Auth provider mengikuti urutan standar: `auth-profiles.json` → env vars → `m ### `tools.sessions` -Mengontrol session mana yang dapat ditargetkan oleh tool session (`sessions_list`, `sessions_history`, `sessions_send`). +Mengontrol sesi mana yang dapat ditargetkan oleh alat sesi (`sessions_list`, `sessions_history`, `sessions_send`). -Default: `tree` (session saat ini + session yang di-spawn olehnya, seperti subagent). +Default: `tree` (sesi saat ini + sesi yang dihasilkan olehnya, seperti subagen). ```json5 { @@ -2214,11 +2252,11 @@ Default: `tree` (session saat ini + session yang di-spawn olehnya, seperti subag Catatan: -- `self`: hanya kunci session saat ini. -- `tree`: session saat ini + session yang di-spawn oleh session saat ini (subagent). -- `agent`: session apa pun yang dimiliki oleh id agent saat ini (dapat mencakup pengguna lain jika Anda menjalankan session per-pengirim di bawah id agent yang sama). -- `all`: session apa pun. Penargetan lintas agent tetap memerlukan `tools.agentToAgent`. -- Clamp sandbox: saat session saat ini tersandbox dan `agents.defaults.sandbox.sessionToolsVisibility="spawned"`, visibilitas dipaksa ke `tree` meskipun `tools.sessions.visibility="all"`. +- `self`: hanya kunci sesi saat ini. +- `tree`: sesi saat ini + sesi yang dihasilkan oleh sesi saat ini (subagen). +- `agent`: sesi apa pun yang dimiliki oleh 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`. +- Pembatas sandbox: saat sesi saat ini disandbox dan `agents.defaults.sandbox.sessionToolsVisibility="spawned"`, visibilitas dipaksa ke `tree` bahkan jika `tools.sessions.visibility="all"`. ### `tools.sessions_spawn` @@ -2229,11 +2267,11 @@ Mengontrol dukungan lampiran inline untuk `sessions_spawn`. tools: { sessions_spawn: { attachments: { - enabled: false, // opt-in: set true untuk mengizinkan lampiran file inline - maxTotalBytes: 5242880, // total 5 MB untuk semua file + enabled: false, // opt-in: set true to allow inline file attachments + maxTotalBytes: 5242880, // 5 MB total across all files maxFiles: 50, maxFileBytes: 1048576, // 1 MB per file - retainOnSessionKeep: false, // pertahankan lampiran saat cleanup="keep" + retainOnSessionKeep: false, // keep attachments when cleanup="keep" }, }, }, @@ -2243,21 +2281,21 @@ Mengontrol dukungan lampiran inline untuk `sessions_spawn`. Catatan: - Lampiran hanya didukung untuk `runtime: "subagent"`. Runtime ACP menolaknya. -- File dimaterialisasi ke workspace child di `.openclaw/attachments//` dengan `.manifest.json`. -- Isi lampiran otomatis disensor dari persistensi transcript. -- Input Base64 divalidasi dengan pemeriksaan alfabet/padding ketat dan guard ukuran sebelum decode. +- File diwujudkan ke workspace anak di `.openclaw/attachments//` dengan `.manifest.json`. +- Konten lampiran otomatis disunting dari persistensi transkrip. +- Input base64 divalidasi dengan pemeriksaan alfabet/padding ketat dan guard ukuran pra-decode. - Izin file adalah `0700` untuk direktori dan `0600` untuk file. - Pembersihan mengikuti kebijakan `cleanup`: `delete` selalu menghapus lampiran; `keep` mempertahankannya hanya saat `retainOnSessionKeep: true`. ### `tools.experimental` -Flag tool bawaan eksperimental. Default mati kecuali aturan auto-enable khusus runtime berlaku. +Flag alat built-in eksperimental. Default mati kecuali aturan auto-enable spesifik runtime berlaku. ```json5 { tools: { experimental: { - planTool: true, // aktifkan update_plan eksperimental + planTool: true, // enable experimental update_plan }, }, } @@ -2265,9 +2303,9 @@ Flag tool bawaan eksperimental. Default mati kecuali aturan auto-enable khusus r Catatan: -- `planTool`: mengaktifkan tool `update_plan` terstruktur untuk pelacakan pekerjaan multi-langkah yang tidak sepele. -- Default: `false` untuk provider non-OpenAI. Proses OpenAI dan OpenAI Codex mengaktifkannya otomatis. -- Saat diaktifkan, system prompt juga menambahkan panduan penggunaan agar model hanya memakainya untuk pekerjaan substansial dan mempertahankan maksimal satu langkah `in_progress`. +- `planTool`: mengaktifkan alat `update_plan` terstruktur untuk pelacakan pekerjaan multi-langkah yang tidak sepele. +- Default: `false` untuk penyedia non-OpenAI. Run OpenAI dan OpenAI Codex mengaktifkannya otomatis saat tidak diatur; tetapkan `false` untuk menonaktifkan auto-enable itu. +- Saat diaktifkan, system prompt juga menambahkan panduan penggunaan agar model hanya menggunakannya untuk pekerjaan yang substansial dan menjaga paling banyak satu langkah `in_progress`. ### `agents.defaults.subagents` @@ -2287,16 +2325,16 @@ Catatan: } ``` -- `model`: model default untuk sub-agent yang di-spawn. Jika dihilangkan, sub-agent mewarisi model pemanggil. -- `allowAgents`: allowlist default id agent target untuk `sessions_spawn` saat agent peminta tidak menetapkan `subagents.allowAgents` sendiri (`["*"]` = apa saja; default: hanya agent yang sama). -- `runTimeoutSeconds`: timeout default (detik) untuk `sessions_spawn` saat pemanggilan tool tidak menyertakan `runTimeoutSeconds`. `0` berarti tanpa timeout. -- Kebijakan tool per-subagent: `tools.subagents.tools.allow` / `tools.subagents.tools.deny`. +- `model`: model default untuk sub-agen yang dihasilkan. Jika dihilangkan, sub-agen mewarisi model pemanggil. +- `allowAgents`: allowlist default ID agen target untuk `sessions_spawn` saat agen peminta tidak mengatur `subagents.allowAgents` sendiri (`["*"]` = apa pun; default: hanya agen yang sama). +- `runTimeoutSeconds`: timeout default (detik) untuk `sessions_spawn` saat panggilan alat menghilangkan `runTimeoutSeconds`. `0` berarti tanpa timeout. +- Kebijakan alat per subagen: `tools.subagents.tools.allow` / `tools.subagents.tools.deny`. --- -## Provider kustom dan base URL +## Penyedia kustom dan base URL -OpenClaw menggunakan katalog model bawaan. Tambahkan provider kustom melalui `models.providers` di config atau `~/.openclaw/agents//agent/models.json`. +OpenClaw menggunakan katalog model built-in. Tambahkan penyedia kustom melalui `models.providers` di konfigurasi atau `~/.openclaw/agents//agent/models.json`. ```json5 { @@ -2326,48 +2364,48 @@ OpenClaw menggunakan katalog model bawaan. Tambahkan provider kustom melalui `mo ``` - Gunakan `authHeader: true` + `headers` untuk kebutuhan auth kustom. -- Override root config agent dengan `OPENCLAW_AGENT_DIR` (atau `PI_CODING_AGENT_DIR`, alias env lama). -- Urutan prioritas penggabungan untuk provider ID yang cocok: - - Nilai `baseUrl` `models.json` agent yang tidak kosong menang. - - Nilai `apiKey` agent yang tidak kosong hanya menang saat provider itu tidak dikelola SecretRef dalam konteks config/auth-profile saat ini. - - Nilai `apiKey` provider yang dikelola SecretRef diperbarui dari marker sumber (`ENV_VAR_NAME` untuk env ref, `secretref-managed` untuk file/exec ref) alih-alih menyimpan secret yang sudah di-resolve. - - Nilai header provider yang dikelola SecretRef diperbarui dari marker sumber (`secretref-env:ENV_VAR_NAME` untuk env ref, `secretref-managed` untuk file/exec ref). - - `apiKey`/`baseUrl` agent yang kosong atau hilang menggunakan `models.providers` di config sebagai fallback. - - `contextWindow`/`maxTokens` model yang cocok menggunakan nilai lebih tinggi antara config eksplisit dan nilai katalog implisit. - - `contextTokens` model yang cocok mempertahankan batas runtime eksplisit bila ada; gunakan ini untuk membatasi konteks efektif tanpa mengubah metadata model native. - - Gunakan `models.mode: "replace"` saat Anda ingin config menulis ulang `models.json` sepenuhnya. - - Persistensi marker bersifat source-authoritative: marker ditulis dari snapshot config sumber aktif (pra-resolusi), bukan dari nilai secret runtime yang sudah di-resolve. +- 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 menang. + - Nilai `apiKey` agen yang tidak kosong menang hanya saat penyedia itu tidak dikelola SecretRef dalam konteks config/auth-profile saat ini. + - Nilai `apiKey` penyedia yang dikelola SecretRef disegarkan dari source marker (`ENV_VAR_NAME` untuk env refs, `secretref-managed` untuk file/exec refs) alih-alih mempersistenkan secret yang telah di-resolve. + - Nilai header penyedia yang dikelola SecretRef disegarkan dari source marker (`secretref-env:ENV_VAR_NAME` untuk env refs, `secretref-managed` untuk file/exec refs). + - `apiKey`/`baseUrl` agen yang kosong atau tidak ada fallback ke `models.providers` dalam konfigurasi. + - `contextWindow`/`maxTokens` model yang cocok menggunakan nilai lebih tinggi antara konfigurasi eksplisit dan nilai katalog implisit. + - `contextTokens` model yang cocok mempertahankan batas runtime eksplisit saat ada; gunakan ini untuk membatasi konteks efektif tanpa mengubah metadata model native. + - Gunakan `models.mode: "replace"` saat Anda ingin konfigurasi menulis ulang `models.json` sepenuhnya. + - Persistensi marker bersifat source-authoritative: marker ditulis dari snapshot konfigurasi sumber aktif (pra-resolusi), bukan dari nilai secret runtime yang telah di-resolve. -### Rincian field provider +### Detail bidang penyedia -- `models.mode`: perilaku katalog provider (`merge` atau `replace`). -- `models.providers`: peta provider kustom yang dikunci dengan id provider. -- `models.providers.*.api`: adaptor request (`openai-completions`, `openai-responses`, `anthropic-messages`, `google-generative-ai`, dll). -- `models.providers.*.apiKey`: kredensial provider (lebih disarankan SecretRef/substitusi env). +- `models.mode`: perilaku katalog penyedia (`merge` atau `replace`). +- `models.providers`: peta penyedia kustom yang dikunci oleh ID penyedia. +- `models.providers.*.api`: adapter permintaan (`openai-completions`, `openai-responses`, `anthropic-messages`, `google-generative-ai`, dll). +- `models.providers.*.apiKey`: kredensial penyedia (sebaiknya gunakan SecretRef/substitusi env). - `models.providers.*.auth`: strategi auth (`api-key`, `token`, `oauth`, `aws-sdk`). -- `models.providers.*.injectNumCtxForOpenAICompat`: untuk Ollama + `openai-completions`, sisipkan `options.num_ctx` ke request (default: `true`). -- `models.providers.*.authHeader`: paksa transport kredensial di header `Authorization` bila diperlukan. +- `models.providers.*.injectNumCtxForOpenAICompat`: untuk Ollama + `openai-completions`, suntikkan `options.num_ctx` ke permintaan (default: `true`). +- `models.providers.*.authHeader`: paksa transport kredensial di header `Authorization` saat diperlukan. - `models.providers.*.baseUrl`: base URL API upstream. -- `models.providers.*.headers`: header statis tambahan untuk routing proxy/tenant. -- `models.providers.*.request`: override transport untuk request HTTP model-provider. - - `request.headers`: header tambahan (digabungkan dengan default provider). Nilai menerima SecretRef. - - `request.auth`: override strategi auth. Mode: `"provider-default"` (gunakan auth bawaan provider), `"authorization-bearer"` (dengan `token`), `"header"` (dengan `headerName`, `value`, `prefix` opsional). - - `request.proxy`: override proxy HTTP. Mode: `"env-proxy"` (gunakan env vars `HTTP_PROXY`/`HTTPS_PROXY`), `"explicit-proxy"` (dengan `url`). Kedua mode menerima sub-objek `tls` opsional. - - `request.tls`: override TLS untuk koneksi langsung. Field: `ca`, `cert`, `key`, `passphrase` (semua menerima SecretRef), `serverName`, `insecureSkipVerify`. -- `models.providers.*.models`: entri katalog model provider eksplisit. +- `models.providers.*.headers`: header statis tambahan untuk perutean proxy/tenant. +- `models.providers.*.request`: override transport untuk permintaan HTTP model-provider. + - `request.headers`: header tambahan (digabungkan dengan default penyedia). Nilai menerima SecretRef. + - `request.auth`: override strategi auth. Mode: `"provider-default"` (gunakan auth built-in penyedia), `"authorization-bearer"` (dengan `token`), `"header"` (dengan `headerName`, `value`, opsional `prefix`). + - `request.proxy`: override proxy HTTP. Mode: `"env-proxy"` (gunakan env var `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`. +- `models.providers.*.models`: entri katalog model penyedia eksplisit. - `models.providers.*.models.*.contextWindow`: metadata jendela konteks model native. -- `models.providers.*.models.*.contextTokens`: batas konteks runtime opsional. Gunakan ini saat Anda menginginkan anggaran konteks efektif yang lebih kecil daripada `contextWindow` native model. -- `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 nilai ini ke `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 menerima string. Saat `true`, OpenClaw meratakan array `messages[].content` yang murni teks menjadi string biasa sebelum mengirim request. +- `models.providers.*.models.*.contextTokens`: batas konteks runtime opsional. Gunakan ini saat Anda ingin anggaran konteks efektif lebih kecil dari `contextWindow` native model. +- `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 nilainya menjadi `false` saat runtime. `baseUrl` kosong/tidak ada mempertahankan perilaku default OpenAI. +- `models.providers.*.models.*.compat.requiresStringContent`: petunjuk kompatibilitas opsional untuk endpoint chat string-only yang kompatibel dengan OpenAI. Saat `true`, OpenClaw meratakan array `messages[].content` teks murni menjadi string biasa sebelum mengirim permintaan. - `plugins.entries.amazon-bedrock.config.discovery`: root pengaturan auto-discovery Bedrock. -- `plugins.entries.amazon-bedrock.config.discovery.enabled`: nyalakan/matikan discovery implisit. +- `plugins.entries.amazon-bedrock.config.discovery.enabled`: aktifkan/nonaktifkan discovery implisit. - `plugins.entries.amazon-bedrock.config.discovery.region`: region AWS untuk discovery. -- `plugins.entries.amazon-bedrock.config.discovery.providerFilter`: filter provider-id opsional untuk discovery yang ditargetkan. -- `plugins.entries.amazon-bedrock.config.discovery.refreshInterval`: interval polling untuk penyegaran discovery. +- `plugins.entries.amazon-bedrock.config.discovery.providerFilter`: filter provider-id opsional untuk discovery terarah. +- `plugins.entries.amazon-bedrock.config.discovery.refreshInterval`: interval polling untuk refresh discovery. - `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. -### Contoh provider +### Contoh penyedia @@ -2403,7 +2441,7 @@ OpenClaw menggunakan katalog model bawaan. Tambahkan provider kustom melalui `mo } ``` -Gunakan `cerebras/zai-glm-4.7` untuk Cerebras; `zai/glm-4.7` untuk Z.AI langsung. +Gunakan `cerebras/zai-glm-4.7` untuk Cerebras; `zai/glm-4.7` untuk Z.AI direct. @@ -2420,7 +2458,7 @@ Gunakan `cerebras/zai-glm-4.7` untuk Cerebras; `zai/glm-4.7` untuk Z.AI langsung } ``` -Set `OPENCODE_API_KEY` (atau `OPENCODE_ZEN_API_KEY`). Gunakan referensi `opencode/...` untuk katalog Zen atau referensi `opencode-go/...` untuk katalog Go. Shortcut: `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. Shortcut: `openclaw onboard --auth-choice opencode-zen` atau `openclaw onboard --auth-choice opencode-go`. @@ -2437,11 +2475,11 @@ Set `OPENCODE_API_KEY` (atau `OPENCODE_ZEN_API_KEY`). Gunakan referensi `opencod } ``` -Set `ZAI_API_KEY`. `z.ai/*` dan `z-ai/*` diterima sebagai alias. Shortcut: `openclaw onboard --auth-choice zai-api-key`. +Tetapkan `ZAI_API_KEY`. `z.ai/*` dan `z-ai/*` diterima sebagai alias. Shortcut: `openclaw onboard --auth-choice zai-api-key`. - Endpoint umum: `https://api.z.ai/api/paas/v4` - Endpoint coding (default): `https://api.z.ai/api/coding/paas/v4` -- Untuk endpoint umum, definisikan provider kustom dengan override base URL. +- Untuk endpoint umum, definisikan penyedia kustom dengan override base URL. @@ -2483,8 +2521,8 @@ Set `ZAI_API_KEY`. `z.ai/*` dan `z-ai/*` diterima sebagai alias. Shortcut: `open Untuk endpoint China: `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 sekarang menguncinya berdasarkan -kapabilitas endpoint, bukan hanya id provider bawaan. +`openai-completions`, dan OpenClaw sekarang menguncinya pada +kapabilitas endpoint alih-alih hanya ID penyedia built-in. @@ -2502,7 +2540,7 @@ kapabilitas endpoint, bukan hanya id provider bawaan. } ``` -Kompatibel Anthropic, provider bawaan. Shortcut: `openclaw onboard --auth-choice kimi-code-api-key`. +Kompatibel dengan Anthropic, penyedia built-in. Shortcut: `openclaw onboard --auth-choice kimi-code-api-key`. @@ -2541,7 +2579,7 @@ Kompatibel Anthropic, provider bawaan. Shortcut: `openclaw onboard --auth-choice } ``` -Base URL harus menghilangkan `/v1` (klien Anthropic akan menambahkannya). Shortcut: `openclaw onboard --auth-choice synthetic-api-key`. +Base URL harus menghilangkan `/v1` (klien Anthropic menambahkannya). Shortcut: `openclaw onboard --auth-choice synthetic-api-key`. @@ -2581,20 +2619,20 @@ Base URL harus menghilangkan `/v1` (klien Anthropic akan menambahkannya). Shortc } ``` -Set `MINIMAX_API_KEY`. Shortcut: +Tetapkan `MINIMAX_API_KEY`. Shortcut: `openclaw onboard --auth-choice minimax-global-api` atau `openclaw onboard --auth-choice minimax-cn-api`. Katalog model sekarang default hanya ke M2.7. -Pada jalur streaming kompatibel Anthropic, OpenClaw menonaktifkan thinking MiniMax +Pada path streaming yang kompatibel dengan Anthropic, OpenClaw menonaktifkan thinking MiniMax secara default kecuali Anda secara eksplisit menetapkan `thinking` sendiri. `/fast on` atau -`params.fastMode: true` menulis ulang `MiniMax-M2.7` ke +`params.fastMode: true` menulis ulang `MiniMax-M2.7` menjadi `MiniMax-M2.7-highspeed`. -Lihat [Local Models](/id/gateway/local-models). Singkatnya: jalankan model lokal besar melalui LM Studio Responses API pada perangkat keras serius; tetap gabungkan model yang di-host untuk fallback. +Lihat [Model Lokal](/id/gateway/local-models). Singkatnya: jalankan model lokal besar melalui LM Studio Responses API pada perangkat keras serius; pertahankan model hosted tetap tergabung untuk fallback. @@ -2615,7 +2653,7 @@ Lihat [Local Models](/id/gateway/local-models). Singkatnya: jalankan model lokal }, entries: { "image-lab": { - apiKey: { source: "env", provider: "default", id: "GEMINI_API_KEY" }, // atau string plaintext + apiKey: { source: "env", provider: "default", id: "GEMINI_API_KEY" }, // or plaintext string env: { GEMINI_API_KEY: "GEMINI_KEY_HERE" }, }, peekaboo: { enabled: true }, @@ -2625,14 +2663,14 @@ Lihat [Local Models](/id/gateway/local-models). Singkatnya: jalankan model lokal } ``` -- `allowBundled`: allowlist opsional hanya untuk bundled Skills (managed/workspace skills tidak terpengaruh). +- `allowBundled`: allowlist opsional hanya untuk skill bundled (skill managed/workspace tidak terpengaruh). - `load.extraDirs`: root skill bersama tambahan (prioritas terendah). -- `install.preferBrew`: saat true, lebih memilih installer Homebrew ketika `brew` - tersedia sebelum kembali ke jenis installer lain. +- `install.preferBrew`: saat true, utamakan installer Homebrew ketika `brew` + tersedia sebelum fallback ke jenis installer lain. - `install.nodeManager`: preferensi installer node untuk spesifikasi `metadata.openclaw.install` (`npm` | `pnpm` | `yarn` | `bun`). -- `entries..enabled: false` menonaktifkan skill meskipun dibundel/terinstal. -- `entries..apiKey`: field kenyamanan API key untuk skill yang mendeklarasikan env var utama (string plaintext atau objek SecretRef). +- `entries..enabled: false` menonaktifkan skill meskipun bundled/terpasang. +- `entries..apiKey`: kemudahan API key untuk skill yang mendeklarasikan env var utama (string plaintext atau objek SecretRef). --- @@ -2661,34 +2699,40 @@ Lihat [Local Models](/id/gateway/local-models). Singkatnya: jalankan model lokal ``` - Dimuat dari `~/.openclaw/extensions`, `/.openclaw/extensions`, plus `plugins.load.paths`. -- Discovery menerima plugin OpenClaw native plus bundle Codex yang kompatibel dan bundle Claude, termasuk bundle Claude tata letak default tanpa manifest. -- **Perubahan config memerlukan restart gateway.** -- `allow`: allowlist opsional (hanya plugin yang terdaftar yang dimuat). `deny` menang. -- `plugins.entries..apiKey`: field kenyamanan API key tingkat plugin (bila didukung plugin). -- `plugins.entries..env`: peta env var yang scoped ke plugin. -- `plugins.entries..hooks.allowPromptInjection`: saat `false`, inti memblokir `before_prompt_build` dan mengabaikan field yang memutasi prompt dari `before_agent_start` lama, sambil mempertahankan `modelOverride` dan `providerOverride` lama. Berlaku untuk hook plugin native dan direktori hook yang disediakan bundle yang didukung. -- `plugins.entries..subagent.allowModelOverride`: secara eksplisit mempercayai plugin ini untuk meminta override `provider` dan `model` per-run untuk proses subagent latar belakang. -- `plugins.entries..subagent.allowedModels`: allowlist opsional target kanonis `provider/model` untuk override subagent tepercaya. Gunakan `"*"` hanya bila Anda memang sengaja ingin mengizinkan model apa pun. -- `plugins.entries..config`: objek config yang didefinisikan plugin (divalidasi oleh skema plugin OpenClaw native bila tersedia). -- `plugins.entries.firecrawl.config.webFetch`: pengaturan provider web-fetch Firecrawl. - - `apiKey`: API key Firecrawl (menerima SecretRef). Menggunakan `plugins.entries.firecrawl.config.webSearch.apiKey`, `tools.web.fetch.firecrawl.apiKey` lama, atau env var `FIRECRAWL_API_KEY` sebagai fallback. +- Discovery menerima plugin OpenClaw native serta bundel Codex dan Claude yang kompatibel, termasuk bundel Claude tanpa manifest dengan tata letak default. +- **Perubahan konfigurasi memerlukan restart gateway.** +- `allow`: allowlist opsional (hanya plugin yang tercantum yang dimuat). `deny` menang. +- `plugins.entries..apiKey`: bidang kemudahan API key tingkat plugin (bila didukung oleh plugin). +- `plugins.entries..env`: peta env var bercakupan plugin. +- `plugins.entries..hooks.allowPromptInjection`: saat `false`, inti memblokir `before_prompt_build` dan mengabaikan bidang yang memutasi prompt dari `before_agent_start` lama, sambil mempertahankan `modelOverride` dan `providerOverride` lama. Berlaku untuk hook plugin native dan direktori hook yang disediakan bundel yang didukung. +- `plugins.entries..subagent.allowModelOverride`: secara eksplisit mempercayai plugin ini untuk meminta override `provider` dan `model` per run bagi run subagen latar belakang. +- `plugins.entries..subagent.allowedModels`: allowlist opsional target `provider/model` kanonis untuk override subagen tepercaya. Gunakan `"*"` hanya jika Anda memang ingin mengizinkan model apa pun. +- `plugins.entries..config`: objek konfigurasi yang didefinisikan plugin (divalidasi oleh skema plugin OpenClaw native bila tersedia). +- `plugins.entries.firecrawl.config.webFetch`: pengaturan penyedia web-fetch Firecrawl. + - `apiKey`: API key Firecrawl (menerima SecretRef). Fallback ke `plugins.entries.firecrawl.config.webSearch.apiKey`, `tools.web.fetch.firecrawl.apiKey` lama, atau env var `FIRECRAWL_API_KEY`. - `baseUrl`: base URL API Firecrawl (default: `https://api.firecrawl.dev`). - `onlyMainContent`: ekstrak hanya konten utama dari halaman (default: `true`). - `maxAgeMs`: usia cache maksimum dalam milidetik (default: `172800000` / 2 hari). - - `timeoutSeconds`: timeout request scrape dalam detik (default: `60`). + - `timeoutSeconds`: timeout permintaan scrape dalam detik (default: `60`). - `plugins.entries.xai.config.xSearch`: pengaturan xAI X Search (pencarian web Grok). - - `enabled`: aktifkan provider X Search. - - `model`: model Grok yang digunakan untuk pencarian (mis. `"grok-4-1-fast"`). + - `enabled`: aktifkan penyedia X Search. + - `model`: model Grok yang digunakan untuk pencarian (misalnya `"grok-4-1-fast"`). - `plugins.entries.memory-core.config.dreaming`: pengaturan memory dreaming (eksperimental). Lihat [Dreaming](/id/concepts/dreaming) untuk fase dan ambang. - `enabled`: sakelar dreaming utama (default `false`). - - `frequency`: cadence cron untuk setiap penyapuan dreaming penuh (`"0 3 * * *"` secara default). - - kebijakan fase dan ambang adalah detail implementasi (bukan kunci config yang ditujukan ke pengguna). -- Plugin bundle Claude yang diaktifkan juga dapat menyumbangkan default Pi tersemat dari `settings.json`; OpenClaw menerapkannya sebagai pengaturan agent yang sudah disanitasi, bukan sebagai patch config 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 memasang dan memilih engine lain. -- `plugins.installs`: metadata instalasi yang dikelola CLI dan digunakan oleh `openclaw plugins update`. + - `frequency`: cadence cron untuk setiap sapuan dreaming penuh (default `"0 3 * * *"`). + - kebijakan fase dan ambang adalah detail implementasi (bukan kunci konfigurasi yang menghadap pengguna). +- Konfigurasi memori lengkap ada di [Referensi konfigurasi memori](/id/reference/memory-config): + - `agents.defaults.memorySearch.*` + - `memory.backend` + - `memory.citations` + - `memory.qmd.*` + - `plugins.entries.memory-core.config.dreaming` +- Plugin bundel Claude yang aktif juga dapat menyumbangkan default Pi tertanam dari `settings.json`; OpenClaw menerapkannya sebagai pengaturan agen yang telah disanitasi, bukan sebagai patch konfigurasi OpenClaw mentah. +- `plugins.slots.memory`: pilih ID plugin memori aktif, atau `"none"` untuk menonaktifkan plugin memori. +- `plugins.slots.contextEngine`: pilih ID plugin context engine aktif; default ke `"legacy"` kecuali Anda memasang dan memilih engine lain. +- `plugins.installs`: metadata instalasi yang dikelola CLI yang digunakan oleh `openclaw plugins update`. - Mencakup `source`, `spec`, `sourcePath`, `installPath`, `version`, `resolvedName`, `resolvedVersion`, `resolvedSpec`, `integrity`, `shasum`, `resolvedAt`, `installedAt`. - - Perlakukan `plugins.installs.*` sebagai state terkelola; lebih disarankan memakai command CLI daripada edit manual. + - Perlakukan `plugins.installs.*` sebagai status terkelola; utamakan perintah CLI daripada edit manual. Lihat [Plugins](/id/tools/plugin). @@ -2703,8 +2747,8 @@ Lihat [Plugins](/id/tools/plugin). evaluateEnabled: true, defaultProfile: "user", ssrfPolicy: { - dangerouslyAllowPrivateNetwork: true, // mode jaringan tepercaya default - // allowPrivateNetwork: true, // alias lama + dangerouslyAllowPrivateNetwork: true, // default trusted-network mode + // allowPrivateNetwork: true, // legacy alias // hostnameAllowlist: ["*.example.com", "example.com"], // allowedHostnames: ["localhost"], }, @@ -2732,23 +2776,23 @@ Lihat [Plugins](/id/tools/plugin). - `evaluateEnabled: false` menonaktifkan `act:evaluate` dan `wait --fn`. - `ssrfPolicy.dangerouslyAllowPrivateNetwork` default ke `true` saat tidak diatur (model jaringan tepercaya). -- Set `ssrfPolicy.dangerouslyAllowPrivateNetwork: false` untuk navigasi browser ketat yang hanya publik. -- Dalam mode ketat, endpoint profile CDP remote (`profiles.*.cdpUrl`) tunduk pada pemblokiran jaringan private yang sama selama pemeriksaan reachability/discovery. +- Tetapkan `ssrfPolicy.dangerouslyAllowPrivateNetwork: false` untuk navigasi browser ketat hanya publik. +- Dalam mode ketat, endpoint profil CDP jarak jauh (`profiles.*.cdpUrl`) tunduk pada pemblokiran jaringan privat yang sama selama pemeriksaan keterjangkauan/discovery. - `ssrfPolicy.allowPrivateNetwork` tetap didukung sebagai alias lama. - Dalam mode ketat, gunakan `ssrfPolicy.hostnameAllowlist` dan `ssrfPolicy.allowedHostnames` untuk pengecualian eksplisit. -- Profile remote bersifat attach-only (start/stop/reset dinonaktifkan). +- Profil jarak jauh bersifat attach-only (start/stop/reset dinonaktifkan). - `profiles.*.cdpUrl` menerima `http://`, `https://`, `ws://`, dan `wss://`. Gunakan HTTP(S) saat Anda ingin OpenClaw menemukan `/json/version`; gunakan WS(S) - saat provider Anda memberi URL WebSocket DevTools langsung. -- Profile `existing-session` hanya untuk host dan menggunakan Chrome MCP, bukan CDP. -- Profile `existing-session` dapat menetapkan `userDataDir` untuk menargetkan profile browser + saat penyedia Anda memberi URL WebSocket DevTools langsung. +- Profil `existing-session` hanya host dan menggunakan Chrome MCP alih-alih CDP. +- Profil `existing-session` dapat menetapkan `userDataDir` untuk menargetkan profil browser berbasis Chromium tertentu seperti Brave atau Edge. -- Profile `existing-session` mempertahankan batas rute Chrome MCP saat ini: - tindakan berbasis snapshot/ref alih-alih penargetan selector CSS, hook upload satu file, - tanpa override timeout dialog, tanpa `wait --load networkidle`, dan tanpa - `responsebody`, ekspor PDF, intersepsi unduhan, atau tindakan batch. -- Profile `openclaw` lokal yang dikelola otomatis menetapkan `cdpPort` dan `cdpUrl`; hanya - set `cdpUrl` secara eksplisit untuk CDP remote. +- Profil `existing-session` mempertahankan batas rute Chrome MCP saat ini: + aksi berbasis snapshot/ref alih-alih penargetan selector CSS, hook upload satu file, + tanpa override timeout dialog, tanpa `wait --load networkidle`, serta tanpa + `responsebody`, ekspor PDF, intersepsi unduhan, atau aksi batch. +- Profil `openclaw` lokal yang dikelola secara otomatis menetapkan `cdpPort` dan `cdpUrl`; hanya + atur `cdpUrl` secara eksplisit untuk CDP jarak jauh. - Urutan auto-detect: browser default jika berbasis Chromium → Chrome → Brave → Edge → Chromium → Chrome Canary. - Layanan kontrol: hanya loopback (port diturunkan dari `gateway.port`, default `18791`). - `extraArgs` menambahkan flag peluncuran tambahan ke startup Chromium lokal (misalnya @@ -2764,14 +2808,14 @@ Lihat [Plugins](/id/tools/plugin). seamColor: "#FF4500", assistant: { name: "OpenClaw", - avatar: "CB", // emoji, teks singkat, URL gambar, atau data URI + avatar: "CB", // emoji, short text, image URL, or data URI }, }, } ``` -- `seamColor`: warna aksen untuk chrome UI aplikasi native (tint gelembung mode Talk, dll.). -- `assistant`: override identitas Control UI. Menggunakan identitas agent aktif sebagai fallback. +- `seamColor`: warna aksen untuk chrome UI aplikasi native (warna bubble Talk Mode, dll.). +- `assistant`: override identitas Control UI. Fallback ke identitas agen aktif. --- @@ -2786,8 +2830,8 @@ Lihat [Plugins](/id/tools/plugin). auth: { mode: "token", // none | token | password | trusted-proxy token: "your-token", - // password: "your-password", // atau OPENCLAW_GATEWAY_PASSWORD - // trustedProxy: { userHeader: "x-forwarded-user" }, // untuk mode=trusted-proxy; lihat /gateway/trusted-proxy-auth + // password: "your-password", // or OPENCLAW_GATEWAY_PASSWORD + // trustedProxy: { userHeader: "x-forwarded-user" }, // for mode=trusted-proxy; see /gateway/trusted-proxy-auth allowTailscale: true, rateLimit: { maxAttempts: 10, @@ -2804,8 +2848,8 @@ Lihat [Plugins](/id/tools/plugin). enabled: true, basePath: "/openclaw", // root: "dist/control-ui", - // allowedOrigins: ["https://control.example.com"], // wajib untuk Control UI non-loopback - // dangerouslyAllowHostHeaderOriginFallback: false, // mode fallback origin Host-header yang berbahaya + // allowedOrigins: ["https://control.example.com"], // required for non-loopback Control UI + // dangerouslyAllowHostHeaderOriginFallback: false, // dangerous Host-header origin fallback mode // allowInsecureAuth: false, // dangerouslyDisableDeviceAuth: false, }, @@ -2816,12 +2860,12 @@ Lihat [Plugins](/id/tools/plugin). // password: "your-password", }, trustedProxies: ["10.0.0.1"], - // Opsional. Default false. + // Optional. Default false. allowRealIpFallback: false, tools: { - // Deny HTTP /tools/invoke tambahan + // Additional /tools/invoke HTTP denies deny: ["browser"], - // Hapus tool dari daftar deny HTTP default + // Remove tools from the default HTTP deny list allow: ["gateway"], }, push: { @@ -2836,127 +2880,40 @@ Lihat [Plugins](/id/tools/plugin). } ``` - + -- `mode`: `local` (jalankan gateway) atau `remote` (terhubung ke gateway remote). Gateway menolak untuk start kecuali `local`. +- `mode`: `local` (jalankan gateway) atau `remote` (hubungkan ke gateway jarak jauh). Gateway menolak start kecuali `local`. - `port`: port multiplex 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 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 default `loopback` mendengarkan pada `127.0.0.1` di dalam kontainer. Dengan jaringan bridge Docker (`-p 18789:18789`), lalu lintas tiba di `eth0`, sehingga gateway tidak dapat dijangkau. Gunakan `--network host`, atau set `bind: "lan"` (atau `bind: "custom"` dengan `customBindHost: "0.0.0.0"`) agar mendengarkan pada semua interface. -- **Auth**: wajib secara default. Bind non-loopback memerlukan auth gateway. Dalam praktiknya itu berarti token/password bersama atau reverse proxy identity-aware 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), set `gateway.auth.mode` secara eksplisit ke `token` atau `password`. Startup dan alur install/perbaikan layanan akan gagal saat keduanya dikonfigurasi dan mode tidak diatur. -- `gateway.auth.mode: "none"`: mode tanpa auth eksplisit. Gunakan hanya untuk setup local loopback tepercaya; ini sengaja tidak ditawarkan dalam prompt onboarding. -- `gateway.auth.mode: "trusted-proxy"`: delegasikan auth ke reverse proxy identity-aware dan percayai header identitas dari `gateway.trustedProxies` (lihat [Trusted Proxy Auth](/id/gateway/trusted-proxy-auth)). Mode ini mengharapkan sumber proxy **non-loopback**; reverse proxy loopback pada host yang sama tidak memenuhi auth trusted-proxy. -- `gateway.auth.allowTailscale`: saat `true`, header identitas Tailscale Serve dapat memenuhi auth Control UI/WebSocket (diverifikasi melalui `tailscale whois`). Endpoint HTTP API **tidak** menggunakan auth header Tailscale itu; mereka mengikuti mode auth HTTP gateway normal. Alur tanpa token ini mengasumsikan host gateway tepercaya. Default ke `true` saat `tailscale.mode = "serve"`. -- `gateway.auth.rateLimit`: limiter opsional untuk auth gagal. Berlaku per IP klien dan per cakupan auth (shared-secret dan device-token dilacak secara independen). Percobaan yang diblokir mengembalikan `429` + `Retry-After`. - - Pada jalur Control UI Tailscale Serve async, percobaan gagal untuk `{scope, clientIp}` yang sama diserialkan sebelum penulisan kegagalan. Karena itu, percobaan buruk yang bersamaan dari klien yang sama dapat memicu limiter pada request kedua alih-alih keduanya lolos sebagai mismatch biasa. - - `gateway.auth.rateLimit.exemptLoopback` default ke `true`; set `false` saat Anda sengaja ingin lalu lintas localhost juga dikenai rate limit (untuk setup pengujian atau deployment proxy yang ketat). -- Percobaan auth WS dari origin browser selalu dibatasi dengan pengecualian loopback dinonaktifkan (defense-in-depth terhadap brute force localhost berbasis browser). -- Pada loopback, lockout origin browser tersebut diisolasi per nilai `Origin` +- **Catatan Docker**: bind default `loopback` mendengarkan pada `127.0.0.1` di dalam container. Dengan Docker bridge networking (`-p 18789:18789`), lalu lintas tiba di `eth0`, sehingga gateway tidak dapat dijangkau. Gunakan `--network host`, atau tetapkan `bind: "lan"` (atau `bind: "custom"` dengan `customBindHost: "0.0.0.0"`) untuk mendengarkan di semua interface. +- **Auth**: wajib secara default. Bind non-loopback memerlukan auth gateway. Dalam praktiknya itu berarti token/password bersama atau reverse proxy yang sadar identitas dengan `gateway.auth.mode: "trusted-proxy"`. Wizard onboarding menghasilkan token secara default. +- Jika `gateway.auth.token` dan `gateway.auth.password` keduanya dikonfigurasi (termasuk SecretRef), tetapkan `gateway.auth.mode` secara eksplisit ke `token` atau `password`. Startup dan flow instalasi/perbaikan layanan gagal saat keduanya dikonfigurasi dan mode tidak diatur. +- `gateway.auth.mode: "none"`: mode tanpa auth eksplisit. Gunakan hanya untuk setup loopback lokal tepercaya; ini sengaja tidak ditawarkan oleh prompt onboarding. +- `gateway.auth.mode: "trusted-proxy"`: delegasikan auth ke reverse proxy yang sadar identitas dan percayai header identitas dari `gateway.trustedProxies` (lihat [Trusted Proxy Auth](/id/gateway/trusted-proxy-auth)). Mode ini mengharapkan sumber proxy **non-loopback**; reverse proxy loopback pada host yang sama tidak memenuhi trusted-proxy auth. +- `gateway.auth.allowTailscale`: saat `true`, header identitas Tailscale Serve dapat memenuhi auth Control UI/WebSocket (diverifikasi melalui `tailscale whois`). Endpoint HTTP API **tidak** menggunakan auth header Tailscale itu; mereka mengikuti mode auth HTTP normal gateway. Flow tanpa token ini mengasumsikan host gateway tepercaya. Default ke `true` saat `tailscale.mode = "serve"`. +- `gateway.auth.rateLimit`: limiter auth gagal opsional. Berlaku per IP klien dan per scope auth (shared-secret dan device-token dilacak secara independen). Upaya yang diblokir mengembalikan `429` + `Retry-After`. + - Pada path async Tailscale Serve Control UI, upaya gagal untuk `{scope, clientIp}` yang sama diserialisasi sebelum penulisan kegagalan. Karena itu upaya buruk yang bersamaan dari klien yang sama dapat memicu limiter pada permintaan kedua alih-alih keduanya lolos sebagai mismatch biasa. + - `gateway.auth.rateLimit.exemptLoopback` default ke `true`; tetapkan `false` saat Anda memang ingin lalu lintas localhost juga dibatasi (untuk setup uji atau deployment proxy ketat). +- Upaya auth WS asal browser selalu di-throttle dengan pengecualian loopback dinonaktifkan (defense-in-depth 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 lain. + mengunci origin yang berbeda. - `tailscale.mode`: `serve` (hanya tailnet, bind loopback) atau `funnel` (publik, memerlukan auth). -- `controlUi.allowedOrigins`: allowlist origin browser eksplisit untuk koneksi WebSocket Gateway. Wajib saat klien browser diharapkan berasal dari origin non-loopback. -- `controlUi.dangerouslyAllowHostHeaderOriginFallback`: mode berbahaya yang mengaktifkan fallback origin Host-header untuk deployment yang sengaja bergantung pada kebijakan origin Host-header. -- `remote.transport`: `ssh` (default) atau `direct` (ws/wss). Untuk `direct`, `remote.url` harus `ws://` atau `wss://`. -- `OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1`: override break-glass sisi klien yang mengizinkan `ws://` plaintext ke IP jaringan private tepercaya; default tetap hanya loopback untuk plaintext. -- `gateway.remote.token` / `.password` adalah field kredensial klien remote. Field ini sendiri tidak mengonfigurasi auth gateway. -- `gateway.push.apns.relay.baseUrl`: base HTTPS URL untuk relay APNs eksternal yang digunakan build iOS resmi/TestFlight setelah menerbitkan pendaftaran berbasis relay ke gateway. URL ini harus cocok dengan URL relay yang dikompilasi ke build iOS. +- `controlUi.allowedOrigins`: allowlist browser-origin eksplisit untuk koneksi WebSocket Gateway. Wajib saat klien browser diharapkan berasal dari origin non-loopback. +- `controlUi.dangerouslyAllowHostHeaderOriginFallback`: mode berbahaya yang mengaktifkan fallback origin berbasis Host-header untuk deployment yang dengan sengaja mengandalkan kebijakan origin Host-header. +- `remote.transport`: `ssh` (default) atau `direct` (ws/wss). Untuk `direct`, `remote.url` harus berupa `ws://` atau `wss://`. +- `OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1`: override break-glass sisi klien yang mengizinkan `ws://` plaintext ke IP jaringan privat tepercaya; default tetap hanya loopback untuk plaintext. +- `gateway.remote.token` / `.password` adalah bidang kredensial klien jarak jauh. Bidang ini tidak mengonfigurasi auth gateway dengan sendirinya. +- `gateway.push.apns.relay.baseUrl`: base URL HTTPS untuk relay APNs eksternal yang digunakan oleh build iOS resmi/TestFlight setelah build tersebut memublikasikan registrasi berbasis relay ke gateway. URL ini harus cocok dengan URL relay yang dikompilasi ke build iOS. - `gateway.push.apns.relay.timeoutMs`: timeout pengiriman gateway-ke-relay dalam milidetik. Default: `10000`. -- Pendaftaran berbasis relay didelegasikan ke identitas gateway tertentu. Aplikasi iOS yang dipasangkan mengambil `gateway.identity.get`, menyertakan identitas itu dalam pendaftaran relay, dan meneruskan grant pengiriman yang scoped ke pendaftaran ke gateway. Gateway lain tidak dapat menggunakan ulang pendaftaran yang tersimpan itu. -- `OPENCLAW_APNS_RELAY_BASE_URL` / `OPENCLAW_APNS_RELAY_TIMEOUT_MS`: override env sementara untuk config relay di atas. -- `OPENCLAW_APNS_RELAY_ALLOW_HTTP=true`: escape hatch khusus pengembangan untuk URL relay HTTP loopback. URL relay produksi sebaiknya tetap HTTPS. -- `gateway.channelHealthCheckMinutes`: interval monitor kesehatan channel dalam menit. Set `0` untuk menonaktifkan restart health-monitor secara global. Default: `5`. -- `gateway.channelStaleEventThresholdMinutes`: ambang socket usang dalam menit. Pertahankan nilai ini lebih besar atau sama dengan `gateway.channelHealthCheckMinutes`. Default: `30`. -- `gateway.channelMaxRestartsPerHour`: jumlah maksimum restart health-monitor per channel/akun dalam jendela satu jam berjalan. Default: `10`. -- `channels..healthMonitor.enabled`: opt-out per-channel untuk restart health-monitor sambil tetap mempertahankan monitor global aktif. -- `channels..accounts..healthMonitor.enabled`: override per-akun untuk channel multi-akun. Saat diatur, ini memiliki prioritas atas override tingkat channel. -- Jalur panggilan gateway lokal dapat menggunakan `gateway.remote.*` sebagai fallback hanya saat `gateway.auth.*` tidak diatur. -- Jika `gateway.auth.token` / `gateway.auth.password` secara eksplisit dikonfigurasi melalui SecretRef dan tidak ter-resolve, resolusi gagal secara fail-closed (tanpa fallback remote yang menutupi). -- `trustedProxies`: IP reverse proxy yang mengakhiri TLS atau menyisipkan header klien-terusan. Hanya cantumkan proxy yang Anda kendalikan. Entri loopback tetap valid untuk setup proxy pada host yang sama/deteksi lokal (misalnya Tailscale Serve atau reverse proxy lokal), tetapi mereka **tidak** membuat request loopback memenuhi syarat untuk `gateway.auth.mode: "trusted-proxy"`. -- `allowRealIpFallback`: saat `true`, gateway menerima `X-Real-IP` jika `X-Forwarded-For` hilang. Default `false` untuk perilaku fail-closed. -- `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 - -- Chat Completions: dinonaktifkan secara default. Aktifkan dengan `gateway.http.endpoints.chatCompletions.enabled: true`. -- Responses API: `gateway.http.endpoints.responses.enabled`. -- Penguatan input URL Responses: - - `gateway.http.endpoints.responses.maxUrlParts` - - `gateway.http.endpoints.responses.files.urlAllowlist` - - `gateway.http.endpoints.responses.images.urlAllowlist` - Allowlist kosong diperlakukan sebagai tidak 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` (set hanya untuk origin HTTPS yang Anda kendalikan; lihat [Trusted Proxy Auth](/id/gateway/trusted-proxy-auth#tls-termination-and-hsts)) - -### Isolasi multi-instance - -Jalankan beberapa gateway pada satu host dengan port dan direktori state yang unik: - -```bash -OPENCLAW_CONFIG_PATH=~/.openclaw/a.json \ -OPENCLAW_STATE_DIR=~/.openclaw-a \ -openclaw gateway --port 19001 -``` - -Flag kenyamanan: `--dev` (menggunakan `~/.openclaw-dev` + port `19001`), `--profile ` (menggunakan `~/.openclaw-`). - -Lihat [Multiple Gateways](/id/gateway/multiple-gateways). - -### `gateway.tls` - -```json5 -{ - gateway: { - tls: { - enabled: false, - autoGenerate: false, - certPath: "/etc/openclaw/tls/server.crt", - keyPath: "/etc/openclaw/tls/server.key", - caPath: "/etc/openclaw/tls/ca-bundle.crt", - }, - }, -} -``` - -- `enabled`: mengaktifkan terminasi TLS pada listener gateway (HTTPS/WSS) (default: `false`). -- `autoGenerate`: otomatis membuat pasangan cert/key self-signed lokal saat file eksplisit tidak dikonfigurasi; hanya untuk penggunaan lokal/dev. -- `certPath`: path filesystem ke file sertifikat TLS. -- `keyPath`: path filesystem ke file private key TLS; pastikan izin dibatasi. -- `caPath`: path bundel CA opsional untuk verifikasi klien atau rantai trust kustom. - -### `gateway.reload` - -```json5 -{ - gateway: { - reload: { - mode: "hybrid", // off | restart | hot | hybrid - debounceMs: 500, - deferralTimeoutMs: 300000, - }, - }, -} -``` - -- `mode`: mengontrol bagaimana edit config diterapkan saat runtime. - - `"off"`: abaikan edit live; perubahan memerlukan restart eksplisit. - - `"restart"`: selalu restart proses gateway saat config 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 config diterapkan (integer non-negatif). -- `deferralTimeoutMs`: waktu maksimum dalam ms untuk menunggu operasi yang sedang berjalan sebelum memaksa restart (default: `300000` = 5 menit). - ---- - -## Hooks - -```json5 -{ - hooks: { - enabled: true, - token: "shared-secret", \ No newline at end of file +- Registrasi berbasis relay didelegasikan ke identitas gateway tertentu. Aplikasi iOS yang dipairing mengambil `gateway.identity.get`, menyertakan identitas itu dalam registrasi relay, dan meneruskan grant pengiriman bercakupan registrasi ke gateway. Gateway lain tidak dapat menggunakan kembali registrasi yang tersimpan itu. +- `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 harus tetap menggunakan HTTPS. +- `gateway.channelHealthCheckMinutes`: interval monitor kesehatan channel dalam menit. Tetapkan `0` untuk menonaktifkan restart monitor kesehatan secara global. Default: `5`. +- `gateway.channelStaleEventThresholdMinutes`: ambang socket stale dalam menit. Pertahankan agar lebih besar dari atau sama dengan `gateway.channelHealthCheckMinutes`. Default: `30`. +- `gateway.channelMaxRestartsPerHour`: restart monitor kesehatan maksimum per channel/akun dalam satu jam berjalan. Default: `10`. +- `channels..healthMonitor.enabled`: opt-out per channel untuk restart monitor kesehatan sambil tetap mempertahankan monitor global aktif. +- `channels..accounts..healthMonitor.enabled`: override per akun untuk channel multi-akun. Saat diatur, nilainya lebih diutamakan daripada override tingkat channel. +- Path panggilan gateway lokal dapat menggunakan `gateway.remote.*` sebagai fallback hanya saat `gateway.auth.*` tidak diatur. +- Jika `gateway.auth.token` \ No newline at end of file diff --git a/docs/id/gateway/configuration.md b/docs/id/gateway/configuration.md index 475c90f40..221e99c69 100644 --- a/docs/id/gateway/configuration.md +++ b/docs/id/gateway/configuration.md @@ -1,15 +1,15 @@ --- read_when: - Menyiapkan OpenClaw untuk pertama kalinya - - Mencari pola konfigurasi yang umum - - Menavigasi ke bagian config tertentu + - Mencari pola konfigurasi umum + - Menavigasi ke bagian konfigurasi tertentu summary: 'Ikhtisar konfigurasi: tugas umum, penyiapan cepat, dan tautan ke referensi lengkap' title: Konfigurasi x-i18n: - generated_at: "2026-04-05T13:54:09Z" + generated_at: "2026-04-08T06:01:54Z" model: gpt-5.4 provider: openai - source_hash: a39a7de09c5f9540785ec67f37d435a7a86201f0f5f640dae663054f35976712 + source_hash: 199a1e515bd4003319e71593a2659bb883299a76ff67e273d92583df03c96604 source_path: gateway/configuration.md workflow: 15 --- @@ -21,13 +21,13 @@ OpenClaw membaca config ```bash - openclaw onboard # full onboarding flow - openclaw configure # config wizard + openclaw onboard # alur onboarding lengkap + openclaw configure # wizard config ``` - + ```bash openclaw config get agents.defaults.workspace openclaw config set agents.defaults.heartbeat.every "2h" @@ -58,10 +58,11 @@ Lihat [referensi lengkap](/gateway/configuration-reference) untuk setiap field y Buka [http://127.0.0.1:18789](http://127.0.0.1:18789) dan gunakan tab **Config**. - Control UI merender formulir dari skema config live, termasuk metadata docs `title` / `description` pada field serta skema plugin dan channel saat - tersedia, dengan editor **Raw JSON** sebagai jalan keluar. Untuk UI - drill-down dan tooling lainnya, gateway juga mengekspos `config.schema.lookup` untuk - mengambil satu node skema yang dicakup path beserta ringkasan child langsung. + Control UI merender formulir dari skema config aktif, termasuk metadata docs + `title` / `description` field serta skema plugin dan channel jika tersedia, + dengan editor **Raw JSON** sebagai jalan keluar. Untuk UI penelusuran mendalam + dan alat lainnya, gateway juga mengekspos `config.schema.lookup` untuk + mengambil satu node skema dengan cakupan path beserta ringkasan turunan langsung. Edit `~/.openclaw/openclaw.json` secara langsung. Gateway memantau file tersebut dan menerapkan perubahan secara otomatis (lihat [hot reload](#config-hot-reload)). @@ -71,29 +72,33 @@ Lihat [referensi lengkap](/gateway/configuration-reference) untuk setiap field y ## Validasi ketat -OpenClaw hanya menerima konfigurasi yang sepenuhnya cocok dengan skema. Key yang tidak dikenal, tipe yang salah format, atau nilai yang tidak valid akan membuat Gateway **menolak untuk memulai**. Satu-satunya pengecualian di level root adalah `$schema` (string), sehingga editor dapat melampirkan metadata JSON Schema. +OpenClaw hanya menerima konfigurasi yang sepenuhnya cocok dengan skema. Key yang tidak dikenal, tipe yang salah format, atau nilai yang tidak valid akan membuat Gateway **menolak untuk memulai**. Satu-satunya pengecualian di level root adalah `$schema` (string), agar editor dapat melampirkan metadata JSON Schema. -Catatan tooling skema: +Catatan alat skema: - `openclaw config schema` mencetak keluarga JSON Schema yang sama yang digunakan oleh Control UI dan validasi config. -- Nilai field `title` dan `description` dibawa ke output skema untuk - tooling editor dan formulir. -- Entri nested object, wildcard (`*`), dan array-item (`[]`) mewarisi metadata - docs yang sama ketika dokumentasi field yang cocok tersedia. -- Branch komposisi `anyOf` / `oneOf` / `allOf` juga mewarisi metadata docs +- Perlakukan keluaran skema tersebut sebagai kontrak kanonis yang dapat dibaca mesin untuk + `openclaw.json`; ikhtisar ini dan referensi konfigurasi merangkumnya. +- Nilai `title` dan `description` field dibawa ke keluaran skema untuk + alat editor dan formulir. +- Entri objek bertingkat, wildcard (`*`), dan item array (`[]`) mewarisi metadata docs yang sama + ketika dokumentasi field yang cocok tersedia. +- Cabang komposisi `anyOf` / `oneOf` / `allOf` juga mewarisi metadata docs yang sama, sehingga varian union/intersection tetap memiliki bantuan field yang sama. -- `config.schema.lookup` mengembalikan satu path config yang dinormalisasi dengan node - skema dangkal (`title`, `description`, `type`, `enum`, `const`, batas umum, - dan field validasi serupa), metadata petunjuk UI yang cocok, dan ringkasan child langsung - untuk tooling drill-down. -- Skema plugin/channel runtime digabungkan saat gateway dapat memuat - registri manifest saat ini. +- `config.schema.lookup` mengembalikan satu path config yang dinormalisasi dengan node skema + dangkal (`title`, `description`, `type`, `enum`, `const`, batas umum, + dan field validasi serupa), metadata petunjuk UI yang cocok, dan ringkasan turunan langsung + untuk alat penelusuran mendalam. +- Skema plugin/channel runtime digabungkan ketika gateway dapat memuat + registri manifes saat ini. +- `pnpm config:docs:check` mendeteksi ketidaksesuaian antara artefak baseline config + yang berhadapan dengan docs dan permukaan skema saat ini. Saat validasi gagal: -- Gateway tidak melakukan boot +- Gateway tidak akan berjalan - Hanya perintah diagnostik yang berfungsi (`openclaw doctor`, `openclaw logs`, `openclaw health`, `openclaw status`) - Jalankan `openclaw doctor` untuk melihat masalah yang tepat - Jalankan `openclaw doctor --fix` (atau `--yes`) untuk menerapkan perbaikan @@ -101,11 +106,11 @@ Saat validasi gagal: ## Tugas umum - + Setiap channel memiliki bagian config sendiri di bawah `channels.`. Lihat halaman channel khusus untuk langkah penyiapan: - [WhatsApp](/id/channels/whatsapp) — `channels.whatsapp` - - [Telegram](/channels/telegram) — `channels.telegram` + - [Telegram](/id/channels/telegram) — `channels.telegram` - [Discord](/id/channels/discord) — `channels.discord` - [Feishu](/id/channels/feishu) — `channels.feishu` - [Google Chat](/id/channels/googlechat) — `channels.googlechat` @@ -132,7 +137,7 @@ Saat validasi gagal: - + Tetapkan model utama dan fallback opsional: ```json5 @@ -152,29 +157,29 @@ Saat validasi gagal: } ``` - - `agents.defaults.models` mendefinisikan katalog model dan bertindak sebagai allowlist untuk `/model`. - - Ref model menggunakan format `provider/model` (misalnya `anthropic/claude-opus-4-6`). - - `agents.defaults.imageMaxDimensionPx` mengontrol downscaling gambar transkrip/tool (default `1200`); nilai yang lebih rendah biasanya mengurangi penggunaan vision-token pada eksekusi yang banyak screenshot. - - Lihat [Models CLI](/concepts/models) untuk mengganti model di chat dan [Failover Model](/concepts/model-failover) untuk perilaku rotasi auth dan fallback. - - Untuk provider kustom/self-hosted, lihat [Provider kustom](/gateway/configuration-reference#custom-providers-and-base-urls) di referensi. + - `agents.defaults.models` mendefinisikan katalog model dan berfungsi sebagai allowlist untuk `/model`. + - Referensi model menggunakan format `provider/model` (misalnya `anthropic/claude-opus-4-6`). + - `agents.defaults.imageMaxDimensionPx` mengontrol downscaling gambar transkrip/alat (default `1200`); nilai yang lebih rendah biasanya mengurangi penggunaan vision-token pada proses yang banyak screenshot. + - Lihat [Models CLI](/id/concepts/models) untuk mengganti model di chat dan [Model Failover](/id/concepts/model-failover) untuk rotasi auth dan perilaku fallback. + - Untuk provider kustom/self-hosted, lihat [Custom providers](/id/gateway/configuration-reference#custom-providers-and-base-urls) di referensi. - + Akses DM dikontrol per channel melalui `dmPolicy`: - - `"pairing"` (default): pengirim yang tidak dikenal mendapatkan pairing code satu kali untuk disetujui - - `"allowlist"`: hanya pengirim di `allowFrom` (atau penyimpanan allow berpasangan) + - `"pairing"` (default): pengirim yang tidak dikenal mendapatkan kode pairing sekali pakai untuk persetujuan + - `"allowlist"`: hanya pengirim di `allowFrom` (atau penyimpanan izin hasil pairing) - `"open"`: izinkan semua DM masuk (memerlukan `allowFrom: ["*"]`) - `"disabled"`: abaikan semua DM Untuk grup, gunakan `groupPolicy` + `groupAllowFrom` atau allowlist khusus channel. - Lihat [referensi lengkap](/gateway/configuration-reference#dm-and-group-access) untuk detail per channel. + Lihat [referensi lengkap](/id/gateway/configuration-reference#dm-and-group-access) untuk detail per channel. - + Pesan grup secara default **memerlukan mention**. Konfigurasikan pola per agen: ```json5 @@ -197,15 +202,14 @@ Saat validasi gagal: } ``` - - **Mention metadata**: @-mention native (WhatsApp tap-to-mention, Telegram @bot, dll.) - - **Pola teks**: pola regex aman dalam `mentionPatterns` - - Lihat [referensi lengkap](/gateway/configuration-reference#group-chat-mention-gating) untuk override per channel dan mode self-chat. + - **Metadata mentions**: @-mention native (WhatsApp tap-to-mention, Telegram @bot, dll.) + - **Pola teks**: pola regex aman di `mentionPatterns` + - Lihat [referensi lengkap](/id/gateway/configuration-reference#group-chat-mention-gating) untuk override per channel dan mode chat dengan diri sendiri. - - Gunakan `agents.defaults.skills` untuk baseline bersama, lalu override agen tertentu - dengan `agents.list[].skills`: + + Gunakan `agents.defaults.skills` untuk baseline bersama, lalu override agen tertentu dengan `agents.list[].skills`: ```json5 { @@ -222,16 +226,16 @@ Saat validasi gagal: } ``` - - Hilangkan `agents.defaults.skills` untuk Skills tak terbatas secara default. + - Hilangkan `agents.defaults.skills` agar Skills tidak dibatasi secara default. - Hilangkan `agents.list[].skills` untuk mewarisi default. - - Setel `agents.list[].skills: []` untuk tanpa Skills. - - Lihat [Skills](/tools/skills), [Config Skills](/tools/skills-config), dan - [Referensi Konfigurasi](/gateway/configuration-reference#agentsdefaultsskills). + - Tetapkan `agents.list[].skills: []` agar tidak ada Skills. + - Lihat [Skills](/id/tools/skills), [Skills config](/id/tools/skills-config), dan + [Configuration Reference](/id/gateway/configuration-reference#agentsdefaultsskills). - - Kendalikan seberapa agresif gateway memulai ulang channel yang terlihat usang: + + Kontrol seberapa agresif gateway me-restart channel yang terlihat stale: ```json5 { @@ -253,15 +257,15 @@ Saat validasi gagal: } ``` - - Setel `gateway.channelHealthCheckMinutes: 0` untuk menonaktifkan restart health-monitor secara global. + - Tetapkan `gateway.channelHealthCheckMinutes: 0` untuk menonaktifkan restart pemantauan kesehatan secara global. - `channelStaleEventThresholdMinutes` harus lebih besar atau sama dengan interval pemeriksaan. - - Gunakan `channels..healthMonitor.enabled` atau `channels..accounts..healthMonitor.enabled` untuk menonaktifkan auto-restart bagi satu channel atau akun tanpa menonaktifkan monitor global. - - Lihat [Pemeriksaan Kesehatan](/gateway/health) untuk pen-debug-an operasional dan [referensi lengkap](/gateway/configuration-reference#gateway) untuk semua field. + - Gunakan `channels..healthMonitor.enabled` atau `channels..accounts..healthMonitor.enabled` untuk menonaktifkan restart otomatis pada satu channel atau akun tanpa menonaktifkan pemantau global. + - Lihat [Health Checks](/id/gateway/health) untuk debugging operasional dan [referensi lengkap](/id/gateway/configuration-reference#gateway) untuk semua field. - - Sesi mengontrol kontinuitas dan isolasi percakapan: + + Sesi mengontrol kesinambungan dan isolasi percakapan: ```json5 { @@ -281,15 +285,15 @@ Saat validasi gagal: } ``` - - `dmScope`: `main` (bersama) | `per-peer` | `per-channel-peer` | `per-account-channel-peer` + - `dmScope`: `main` (dibagikan) | `per-peer` | `per-channel-peer` | `per-account-channel-peer` - `threadBindings`: default global untuk perutean sesi yang terikat thread (Discord mendukung `/focus`, `/unfocus`, `/agents`, `/session idle`, dan `/session max-age`). - - Lihat [Manajemen Sesi](/concepts/session) untuk cakupan, tautan identitas, dan kebijakan pengiriman. - - Lihat [referensi lengkap](/gateway/configuration-reference#session) untuk semua field. + - Lihat [Session Management](/id/concepts/session) untuk cakupan, tautan identitas, dan kebijakan pengiriman. + - Lihat [referensi lengkap](/id/gateway/configuration-reference#session) untuk semua field. - - Jalankan sesi agen di container Docker yang terisolasi: + + Jalankan sesi agen dalam container Docker yang terisolasi: ```json5 { @@ -306,14 +310,14 @@ Saat validasi gagal: Bangun image terlebih dahulu: `scripts/sandbox-setup.sh` - Lihat [Sandboxing](/gateway/sandboxing) untuk panduan lengkap dan [referensi lengkap](/gateway/configuration-reference#agentsdefaultssandbox) untuk semua opsi. + Lihat [Sandboxing](/id/gateway/sandboxing) untuk panduan lengkap dan [referensi lengkap](/id/gateway/configuration-reference#agentsdefaultssandbox) untuk semua opsi. - + Push berbasis relay dikonfigurasi di `openclaw.json`. - Setel ini di config gateway: + Tetapkan ini di config gateway: ```json5 { @@ -322,7 +326,7 @@ Saat validasi gagal: apns: { relay: { baseUrl: "https://relay.example.com", - // Optional. Default: 10000 + // Opsional. Default: 10000 timeoutMs: 10000, }, }, @@ -331,7 +335,7 @@ Saat validasi gagal: } ``` - Padanan CLI: + Setara CLI: ```bash openclaw config set gateway.push.apns.relay.baseUrl https://relay.example.com @@ -339,35 +343,35 @@ Saat validasi gagal: Yang dilakukan ini: - - Memungkinkan gateway mengirim `push.test`, wake nudge, dan reconnect wake melalui relay eksternal. - - Menggunakan izin kirim yang dicakup registrasi dan diteruskan oleh app iOS yang dipasangkan. Gateway tidak memerlukan token relay untuk seluruh deployment. + - Memungkinkan gateway mengirim `push.test`, dorongan bangun, dan bangun penyambungan ulang melalui relay eksternal. + - Menggunakan izin kirim dengan cakupan registrasi yang diteruskan oleh app iOS yang dipasangkan. Gateway tidak memerlukan token relay cakupan deployment. - Mengikat setiap registrasi berbasis relay ke identitas gateway yang dipasangkan oleh app iOS, sehingga gateway lain tidak dapat menggunakan kembali registrasi yang tersimpan. - - Mempertahankan build iOS lokal/manual pada APNs langsung. Pengiriman berbasis relay hanya berlaku untuk build terdistribusi resmi yang mendaftar melalui relay. - - Harus cocok dengan URL dasar relay yang ditanamkan ke dalam build iOS resmi/TestFlight, sehingga lalu lintas registrasi dan pengiriman mencapai deployment relay yang sama. + - Mempertahankan build iOS lokal/manual pada APNs langsung. Pengiriman berbasis relay hanya berlaku untuk build resmi yang didistribusikan dan mendaftar melalui relay. + - Harus cocok dengan base URL relay yang ditanamkan ke dalam build iOS resmi/TestFlight, sehingga lalu lintas registrasi dan pengiriman mencapai deployment relay yang sama. Alur end-to-end: - 1. Instal build iOS resmi/TestFlight yang dikompilasi dengan URL dasar relay yang sama. + 1. Instal build iOS resmi/TestFlight yang dikompilasi dengan base URL relay yang sama. 2. Konfigurasikan `gateway.push.apns.relay.baseUrl` pada gateway. - 3. Pasangkan app iOS ke gateway dan biarkan sesi node serta operator sama-sama terhubung. - 4. App iOS mengambil identitas gateway, mendaftar ke relay menggunakan App Attest plus app receipt, lalu memublikasikan payload `push.apns.register` berbasis relay ke gateway yang dipasangkan. - 5. Gateway menyimpan handle relay dan izin kirim, lalu menggunakannya untuk `push.test`, wake nudge, dan reconnect wake. + 3. Pasangkan app iOS ke gateway dan biarkan sesi node serta operator terhubung. + 4. App iOS mengambil identitas gateway, mendaftar ke relay menggunakan App Attest plus receipt app, lalu memublikasikan payload `push.apns.register` berbasis relay ke gateway yang dipasangkan. + 5. Gateway menyimpan handle relay dan izin kirim, lalu menggunakannya untuk `push.test`, dorongan bangun, dan bangun penyambungan ulang. Catatan operasional: - - Jika Anda memindahkan app iOS ke gateway yang berbeda, sambungkan kembali app agar dapat memublikasikan registrasi relay baru yang terikat ke gateway tersebut. - - Jika Anda merilis build iOS baru yang mengarah ke deployment relay berbeda, app akan menyegarkan registrasi relay cache alih-alih menggunakan kembali asal relay yang lama. + - Jika Anda memindahkan app iOS ke gateway yang berbeda, sambungkan ulang app agar dapat memublikasikan registrasi relay baru yang terikat ke gateway tersebut. + - Jika Anda merilis build iOS baru yang mengarah ke deployment relay berbeda, app akan menyegarkan registrasi relay cache-nya alih-alih menggunakan kembali origin relay lama. Catatan kompatibilitas: - - `OPENCLAW_APNS_RELAY_BASE_URL` dan `OPENCLAW_APNS_RELAY_TIMEOUT_MS` masih berfungsi sebagai override env sementara. - - `OPENCLAW_APNS_RELAY_ALLOW_HTTP=true` tetap menjadi jalan keluar pengembangan khusus loopback; jangan simpan URL relay HTTP dalam config. + - `OPENCLAW_APNS_RELAY_BASE_URL` dan `OPENCLAW_APNS_RELAY_TIMEOUT_MS` tetap berfungsi sebagai override env sementara. + - `OPENCLAW_APNS_RELAY_ALLOW_HTTP=true` tetap menjadi jalan keluar pengembangan khusus loopback; jangan simpan URL relay HTTP di config. - Lihat [App iOS](/platforms/ios#relay-backed-push-for-official-builds) untuk alur end-to-end dan [Alur autentikasi dan kepercayaan](/platforms/ios#authentication-and-trust-flow) untuk model keamanan relay. + Lihat [iOS App](/id/platforms/ios#relay-backed-push-for-official-builds) untuk alur end-to-end dan [Authentication and trust flow](/id/platforms/ios#authentication-and-trust-flow) untuk model keamanan relay. - + ```json5 { agents: { @@ -381,14 +385,14 @@ Saat validasi gagal: } ``` - - `every`: string durasi (`30m`, `2h`). Setel `0m` untuk menonaktifkan. + - `every`: string durasi (`30m`, `2h`). Tetapkan `0m` untuk menonaktifkan. - `target`: `last` | `none` | `` (misalnya `discord`, `matrix`, `telegram`, atau `whatsapp`) - `directPolicy`: `allow` (default) atau `block` untuk target heartbeat bergaya DM - - Lihat [Heartbeat](/gateway/heartbeat) untuk panduan lengkap. + - Lihat [Heartbeat](/id/gateway/heartbeat) untuk panduan lengkap. - + ```json5 { cron: { @@ -403,13 +407,13 @@ Saat validasi gagal: } ``` - - `sessionRetention`: pangkas sesi eksekusi terisolasi yang telah selesai dari `sessions.json` (default `24h`; setel `false` untuk menonaktifkan). + - `sessionRetention`: pangkas sesi proses terisolasi yang sudah selesai dari `sessions.json` (default `24h`; tetapkan `false` untuk menonaktifkan). - `runLog`: pangkas `cron/runs/.jsonl` berdasarkan ukuran dan jumlah baris yang dipertahankan. - - Lihat [Tugas cron](/id/automation/cron-jobs) untuk ikhtisar fitur dan contoh CLI. + - Lihat [Cron jobs](/id/automation/cron-jobs) untuk ikhtisar fitur dan contoh CLI. - + Aktifkan endpoint webhook HTTP pada Gateway: ```json5 @@ -437,16 +441,16 @@ Saat validasi gagal: - Perlakukan semua konten payload hook/webhook sebagai input yang tidak tepercaya. - Gunakan `hooks.token` khusus; jangan gunakan ulang token Gateway bersama. - Auth hook hanya melalui header (`Authorization: Bearer ...` atau `x-openclaw-token`); token query-string ditolak. - - `hooks.path` tidak boleh berupa `/`; pertahankan ingress webhook pada subpath khusus seperti `/hooks`. - - Biarkan flag bypass konten tidak aman tetap nonaktif (`hooks.gmail.allowUnsafeExternalContent`, `hooks.mappings[].allowUnsafeExternalContent`) kecuali saat melakukan pen-debug-an yang sangat terbatas. - - Jika Anda mengaktifkan `hooks.allowRequestSessionKey`, setel juga `hooks.allowedSessionKeyPrefixes` untuk membatasi session key yang dipilih pemanggil. - - Untuk agen yang digerakkan hook, utamakan tier model modern yang kuat dan kebijakan tool yang ketat (misalnya hanya messaging plus sandboxing jika memungkinkan). + - `hooks.path` tidak boleh `/`; pertahankan ingress webhook pada subpath khusus seperti `/hooks`. + - Biarkan flag bypass konten tidak aman tetap dinonaktifkan (`hooks.gmail.allowUnsafeExternalContent`, `hooks.mappings[].allowUnsafeExternalContent`) kecuali untuk debugging yang sangat terbatas. + - Jika Anda mengaktifkan `hooks.allowRequestSessionKey`, tetapkan juga `hooks.allowedSessionKeyPrefixes` untuk membatasi session key yang dipilih pemanggil. + - Untuk agen yang digerakkan hook, utamakan tier model modern yang kuat dan kebijakan alat yang ketat (misalnya hanya pengiriman pesan ditambah sandboxing jika memungkinkan). - Lihat [referensi lengkap](/gateway/configuration-reference#hooks) untuk semua opsi pemetaan dan integrasi Gmail. + Lihat [referensi lengkap](/id/gateway/configuration-reference#hooks) untuk semua opsi mapping dan integrasi Gmail. - + Jalankan beberapa agen terisolasi dengan workspace dan sesi terpisah: ```json5 @@ -464,12 +468,12 @@ Saat validasi gagal: } ``` - Lihat [Multi-Agent](/concepts/multi-agent) dan [referensi lengkap](/gateway/configuration-reference#multi-agent-routing) untuk aturan binding dan profil akses per agen. + Lihat [Multi-Agent](/id/concepts/multi-agent) dan [referensi lengkap](/id/gateway/configuration-reference#multi-agent-routing) untuk aturan binding dan profil akses per agen. - - Gunakan `$include` untuk mengatur config yang besar: + + Gunakan `$include` untuk mengatur config besar: ```json5 // ~/.openclaw/openclaw.json @@ -482,11 +486,11 @@ Saat validasi gagal: } ``` - - **Satu file**: menggantikan object yang memuatnya - - **Array file**: di-deep-merge secara berurutan (yang belakangan menang) - - **Key saudara**: digabungkan setelah include (menimpa nilai yang di-include) - - **Include bertingkat**: didukung hingga 10 level - - **Path relatif**: diresolusikan relatif terhadap file yang meng-include + - **File tunggal**: menggantikan objek yang memuatnya + - **Array file**: digabungkan secara deep-merge sesuai urutan (yang belakangan menang) + - **Key saudara**: digabungkan setelah include (menimpa nilai yang disertakan) + - **Include bertingkat**: didukung hingga 10 level kedalaman + - **Path relatif**: diselesaikan relatif terhadap file yang menyertakan - **Penanganan error**: error yang jelas untuk file yang hilang, parse error, dan include melingkar @@ -494,16 +498,16 @@ Saat validasi gagal: ## Hot reload config -Gateway memantau `~/.openclaw/openclaw.json` dan menerapkan perubahan secara otomatis — tidak perlu mulai ulang manual untuk sebagian besar pengaturan. +Gateway memantau `~/.openclaw/openclaw.json` dan menerapkan perubahan secara otomatis — tidak perlu restart manual untuk sebagian besar pengaturan. ### Mode reload -| Mode | Perilaku | -| ---------------------- | -------------------------------------------------------------------------------------- | -| **`hybrid`** (default) | Menerapkan perubahan aman secara hot seketika. Secara otomatis memulai ulang untuk perubahan kritis. | -| **`hot`** | Hanya menerapkan perubahan aman secara hot. Mencatat peringatan saat perlu mulai ulang — Anda yang menanganinya. | -| **`restart`** | Memulai ulang Gateway pada setiap perubahan config, aman atau tidak. | -| **`off`** | Menonaktifkan pemantauan file. Perubahan berlaku pada mulai ulang manual berikutnya. | +| Mode | Perilaku | +| ---------------------- | --------------------------------------------------------------------------------------- | +| **`hybrid`** (default) | Menerapkan hot perubahan yang aman secara instan. Otomatis restart untuk yang kritis. | +| **`hot`** | Hanya menerapkan hot perubahan yang aman. Mencatat peringatan saat restart diperlukan — Anda yang menanganinya. | +| **`restart`** | Me-restart Gateway pada setiap perubahan config, aman atau tidak. | +| **`off`** | Menonaktifkan pemantauan file. Perubahan berlaku pada restart manual berikutnya. | ```json5 { @@ -513,60 +517,60 @@ Gateway memantau `~/.openclaw/openclaw.json` dan menerapkan perubahan secara oto } ``` -### Apa yang diterapkan secara hot vs apa yang perlu mulai ulang +### Apa yang diterapkan hot vs apa yang perlu restart -Sebagian besar field diterapkan secara hot tanpa downtime. Dalam mode `hybrid`, perubahan yang memerlukan mulai ulang ditangani secara otomatis. +Sebagian besar field diterapkan secara hot tanpa downtime. Dalam mode `hybrid`, perubahan yang memerlukan restart ditangani secara otomatis. -| Kategori | Fields | Perlu mulai ulang? | -| ------------------- | -------------------------------------------------------------------- | ------------------ | -| Channel | `channels.*`, `web` (WhatsApp) — semua channel bawaan dan extension | Tidak | -| Agen & model | `agent`, `agents`, `models`, `routing` | Tidak | -| Otomatisasi | `hooks`, `cron`, `agent.heartbeat` | Tidak | -| Sesi & pesan | `session`, `messages` | Tidak | -| Tool & media | `tools`, `browser`, `skills`, `audio`, `talk` | Tidak | -| UI & lain-lain | `ui`, `logging`, `identity`, `bindings` | Tidak | -| Server gateway | `gateway.*` (port, bind, auth, tailscale, TLS, HTTP) | **Ya** | -| Infrastruktur | `discovery`, `canvasHost`, `plugins` | **Ya** | +| Kategori | Field | Perlu restart? | +| ------------------- | -------------------------------------------------------------------- | -------------- | +| Channel | `channels.*`, `web` (WhatsApp) — semua channel bawaan dan ekstensi | Tidak | +| Agen & model | `agent`, `agents`, `models`, `routing` | Tidak | +| Otomatisasi | `hooks`, `cron`, `agent.heartbeat` | Tidak | +| Sesi & pesan | `session`, `messages` | Tidak | +| Alat & media | `tools`, `browser`, `skills`, `audio`, `talk` | Tidak | +| UI & lain-lain | `ui`, `logging`, `identity`, `bindings` | Tidak | +| Server gateway | `gateway.*` (port, bind, auth, tailscale, TLS, HTTP) | **Ya** | +| Infrastruktur | `discovery`, `canvasHost`, `plugins` | **Ya** | -`gateway.reload` dan `gateway.remote` adalah pengecualian — mengubahnya **tidak** memicu mulai ulang. +`gateway.reload` dan `gateway.remote` adalah pengecualian — mengubahnya **tidak** memicu restart. ## RPC config (pembaruan terprogram) -RPC penulisan control-plane (`config.apply`, `config.patch`, `update.run`) dibatasi lajunya hingga **3 permintaan per 60 detik** per `deviceId+clientIp`. Saat dibatasi, RPC mengembalikan `UNAVAILABLE` dengan `retryAfterMs`. +RPC penulisan control-plane (`config.apply`, `config.patch`, `update.run`) dibatasi hingga **3 permintaan per 60 detik** per `deviceId+clientIp`. Saat dibatasi, RPC mengembalikan `UNAVAILABLE` dengan `retryAfterMs`. Alur aman/default: -- `config.schema.lookup`: periksa satu subtree config yang dicakup path dengan node - skema dangkal, metadata petunjuk yang cocok, dan ringkasan child langsung +- `config.schema.lookup`: periksa satu subtree config dengan cakupan path dengan node skema dangkal, + metadata petunjuk yang cocok, dan ringkasan turunan langsung - `config.get`: ambil snapshot + hash saat ini -- `config.patch`: jalur pembaruan parsial yang disarankan +- `config.patch`: jalur pembaruan parsial yang disukai - `config.apply`: hanya untuk penggantian config penuh -- `update.run`: pembaruan mandiri + mulai ulang eksplisit +- `update.run`: self-update + restart eksplisit -Saat Anda tidak mengganti seluruh config, utamakan `config.schema.lookup` +Jika Anda tidak mengganti seluruh config, utamakan `config.schema.lookup` lalu `config.patch`. - Memvalidasi + menulis seluruh config dan memulai ulang Gateway dalam satu langkah. + Memvalidasi + menulis config penuh dan me-restart Gateway dalam satu langkah. - `config.apply` mengganti **seluruh config**. Gunakan `config.patch` untuk pembaruan parsial, atau `openclaw config set` untuk key tunggal. + `config.apply` menggantikan **seluruh config**. Gunakan `config.patch` untuk pembaruan parsial, atau `openclaw config set` untuk key tunggal. Parameter: - `raw` (string) — payload JSON5 untuk seluruh config - `baseHash` (opsional) — hash config dari `config.get` (wajib saat config sudah ada) - - `sessionKey` (opsional) — session key untuk ping bangun pasca-mulai-ulang - - `note` (opsional) — catatan untuk sentinel mulai ulang - - `restartDelayMs` (opsional) — penundaan sebelum mulai ulang (default 2000) + - `sessionKey` (opsional) — session key untuk ping bangun pasca-restart + - `note` (opsional) — catatan untuk sentinel restart + - `restartDelayMs` (opsional) — jeda sebelum restart (default 2000) - Permintaan mulai ulang digabungkan saat satu permintaan sudah tertunda/sedang berlangsung, dan cooldown 30 detik berlaku antar siklus mulai ulang. + Permintaan restart digabungkan saat satu restart sudah tertunda/sedang berlangsung, dan cooldown 30 detik berlaku di antara siklus restart. ```bash openclaw gateway call config.get --params '{}' # capture payload.hash @@ -580,19 +584,19 @@ lalu `config.patch`. - Menggabungkan pembaruan parsial ke dalam config yang ada (semantik JSON merge patch): + Menggabungkan pembaruan parsial ke config yang ada (semantik JSON merge patch): - - Object digabungkan secara rekursif + - Objek digabungkan secara rekursif - `null` menghapus key - Array menggantikan Parameter: - - `raw` (string) — JSON5 yang hanya berisi key yang diubah + - `raw` (string) — JSON5 hanya dengan key yang akan diubah - `baseHash` (wajib) — hash config dari `config.get` - `sessionKey`, `note`, `restartDelayMs` — sama seperti `config.apply` - Perilaku mulai ulang cocok dengan `config.apply`: mulai ulang tertunda yang digabungkan plus cooldown 30 detik antar siklus mulai ulang. + Perilaku restart sama dengan `config.apply`: restart tertunda digabungkan ditambah cooldown 30 detik di antara siklus restart. ```bash openclaw gateway call config.patch --params '{ @@ -604,14 +608,14 @@ lalu `config.patch`. -## Environment variable +## Variabel lingkungan -OpenClaw membaca env vars dari parent process ditambah: +OpenClaw membaca env vars dari proses induk ditambah: -- `.env` dari current working directory (jika ada) +- `.env` dari direktori kerja saat ini (jika ada) - `~/.openclaw/.env` (fallback global) -Kedua file tidak menimpa env vars yang sudah ada. Anda juga dapat menetapkan env vars inline dalam config: +Keduanya tidak menimpa env vars yang sudah ada. Anda juga dapat menetapkan env vars inline di config: ```json5 { @@ -623,7 +627,7 @@ Kedua file tidak menimpa env vars yang sudah ada. Anda juga dapat menetapkan env ``` - Jika diaktifkan dan key yang diharapkan belum disetel, OpenClaw menjalankan login shell Anda dan hanya mengimpor key yang hilang: + Jika diaktifkan dan key yang diharapkan belum ditetapkan, OpenClaw menjalankan shell login Anda dan hanya mengimpor key yang hilang: ```json5 { @@ -633,11 +637,11 @@ Kedua file tidak menimpa env vars yang sudah ada. Anda juga dapat menetapkan env } ``` -Padanan env var: `OPENCLAW_LOAD_SHELL_ENV=1` +Setara env var: `OPENCLAW_LOAD_SHELL_ENV=1` - Referensikan env vars dalam nilai string config mana pun dengan `${VAR_NAME}`: + Referensikan env vars dalam nilai string config apa pun dengan `${VAR_NAME}`: ```json5 { @@ -649,15 +653,15 @@ Padanan env var: `OPENCLAW_LOAD_SHELL_ENV=1` Aturan: - Hanya nama huruf besar yang cocok: `[A-Z_][A-Z0-9_]*` -- Env var yang hilang/kosong memunculkan error saat waktu muat -- Escape dengan `$${VAR}` untuk output literal +- Variabel yang hilang/kosong memunculkan error saat waktu muat +- Escape dengan `$${VAR}` untuk keluaran literal - Berfungsi di dalam file `$include` - Substitusi inline: `"${BASE}/v1"` → `"https://api.example.com/v1"` - - Untuk field yang mendukung object SecretRef, Anda dapat menggunakan: + + Untuk field yang mendukung objek SecretRef, Anda dapat menggunakan: ```json5 { @@ -689,16 +693,16 @@ Aturan: } ``` -Detail SecretRef (termasuk `secrets.providers` untuk `env`/`file`/`exec`) ada di [Manajemen Secret](/gateway/secrets). -Path kredensial yang didukung tercantum di [Permukaan Kredensial SecretRef](/reference/secretref-credential-surface). +Detail SecretRef (termasuk `secrets.providers` untuk `env`/`file`/`exec`) ada di [Secrets Management](/id/gateway/secrets). +Path kredensial yang didukung tercantum di [SecretRef Credential Surface](/id/reference/secretref-credential-surface). -Lihat [Environment](/help/environment) untuk prioritas dan sumber lengkap. +Lihat [Environment](/id/help/environment) untuk prioritas dan sumber lengkap. ## Referensi lengkap -Untuk referensi lengkap per field, lihat **[Referensi Konfigurasi](/gateway/configuration-reference)**. +Untuk referensi lengkap per field, lihat **[Configuration Reference](/id/gateway/configuration-reference)**. --- -_Terkait: [Contoh Konfigurasi](/gateway/configuration-examples) · [Referensi Konfigurasi](/gateway/configuration-reference) · [Doctor](/gateway/doctor)_ +_Terkait: [Configuration Examples](/id/gateway/configuration-examples) · [Configuration Reference](/id/gateway/configuration-reference) · [Doctor](/id/gateway/doctor)_ diff --git a/docs/id/plugins/memory-wiki.md b/docs/id/plugins/memory-wiki.md new file mode 100644 index 000000000..4ededed4d --- /dev/null +++ b/docs/id/plugins/memory-wiki.md @@ -0,0 +1,370 @@ +--- +read_when: + - Anda menginginkan pengetahuan persisten melampaui catatan MEMORY.md biasa + - Anda sedang mengonfigurasi plugin memory-wiki bawaan + - Anda ingin memahami wiki_search, wiki_get, atau mode bridge +summary: 'memory-wiki: brankas pengetahuan terkompilasi dengan provenance, klaim, dasbor, dan mode bridge' +title: Memory Wiki +x-i18n: + generated_at: "2026-04-08T06:01:18Z" + model: gpt-5.4 + provider: openai + source_hash: b78dd6a4ef4451dae6b53197bf0c7c2a2ba846b08e4a3a93c1026366b1598d82 + source_path: plugins/memory-wiki.md + workflow: 15 +--- + +# Memory Wiki + +`memory-wiki` adalah plugin bawaan yang mengubah memori tahan lama menjadi +brankas pengetahuan terkompilasi. + +Plugin ini **tidak** menggantikan plugin memori aktif. Plugin memori aktif tetap +mengelola recall, promotion, indexing, dan dreaming. `memory-wiki` berada di +sampingnya dan mengompilasi pengetahuan tahan lama menjadi wiki yang dapat +dinavigasi dengan halaman deterministik, klaim terstruktur, provenance, dasbor, +dan digest yang dapat dibaca mesin. + +Gunakan ini ketika Anda ingin memori berperilaku lebih seperti lapisan +pengetahuan yang dipelihara dan lebih sedikit seperti tumpukan file Markdown. + +## Yang ditambahkan + +- Brankas wiki khusus dengan tata letak halaman deterministik +- Metadata klaim dan bukti yang terstruktur, bukan sekadar prosa +- Provenance, confidence, contradiction, dan open question pada tingkat halaman +- Digest terkompilasi untuk konsumen agent/runtime +- Tool wiki-native untuk search/get/apply/lint +- Mode bridge opsional yang mengimpor artifact publik dari plugin memori aktif +- Mode render yang ramah Obsidian dan integrasi CLI opsional + +## Bagaimana ini sesuai dengan memori + +Anggap pembagiannya seperti ini: + +| Lapisan | Mengelola | +| ------------------------------------------------------ | ------------------------------------------------------------------------------------------ | +| Plugin memori aktif (`memory-core`, QMD, Honcho, dll.) | Recall, semantic search, promotion, dreaming, runtime memori | +| `memory-wiki` | Halaman wiki terkompilasi, sintesis kaya provenance, dasbor, wiki-specific search/get/apply | + +Jika plugin memori aktif mengekspos artifact recall bersama, OpenClaw dapat +mencari di kedua lapisan dalam satu lintasan dengan `memory_search corpus=all`. + +Saat Anda membutuhkan ranking, provenance, atau akses halaman langsung yang +khusus wiki, gunakan tool wiki-native sebagai gantinya. + +## Mode brankas + +`memory-wiki` mendukung tiga mode brankas: + +### `isolated` + +Brankas sendiri, sumber sendiri, tanpa ketergantungan pada `memory-core`. + +Gunakan ini ketika Anda ingin wiki menjadi penyimpanan pengetahuan terkurasi +miliknya sendiri. + +### `bridge` + +Membaca artifact memori publik dan event memori dari plugin memori aktif +melalui seam SDK plugin publik. + +Gunakan ini ketika Anda ingin wiki mengompilasi dan mengatur artifact yang +diekspor plugin memori tanpa menjangkau internal plugin privat. + +Mode bridge dapat mengindeks: + +- artifact memori yang diekspor +- laporan dream +- catatan harian +- file root memori +- log event memori + +### `unsafe-local` + +Escape hatch eksplisit pada mesin yang sama untuk path privat lokal. + +Mode ini sengaja bersifat eksperimental dan tidak portabel. Gunakan hanya +ketika Anda memahami trust boundary dan secara khusus memerlukan akses sistem +berkas lokal yang tidak dapat disediakan oleh mode bridge. + +## Tata letak brankas + +Plugin menginisialisasi brankas seperti ini: + +```text +/ + AGENTS.md + WIKI.md + index.md + inbox.md + entities/ + concepts/ + syntheses/ + sources/ + reports/ + _attachments/ + _views/ + .openclaw-wiki/ +``` + +Konten terkelola tetap berada di dalam blok yang dihasilkan. Blok catatan +manusia dipertahankan. + +Kelompok halaman utama adalah: + +- `sources/` untuk bahan mentah yang diimpor dan halaman yang didukung bridge +- `entities/` untuk hal, orang, sistem, proyek, dan objek yang tahan lama +- `concepts/` untuk ide, abstraksi, pola, dan kebijakan +- `syntheses/` untuk ringkasan terkompilasi dan rollup yang dipelihara +- `reports/` untuk dasbor yang dihasilkan + +## Klaim dan bukti terstruktur + +Halaman dapat membawa frontmatter `claims` terstruktur, bukan hanya teks bebas. + +Setiap klaim dapat mencakup: + +- `id` +- `text` +- `status` +- `confidence` +- `evidence[]` +- `updatedAt` + +Entri bukti dapat mencakup: + +- `sourceId` +- `path` +- `lines` +- `weight` +- `note` +- `updatedAt` + +Inilah yang membuat wiki bertindak lebih seperti lapisan keyakinan daripada +sekadar tumpukan catatan pasif. Klaim dapat dilacak, diberi skor, +dipersengketakan, dan diselesaikan kembali ke sumber. + +## Pipeline compile + +Langkah compile membaca halaman wiki, menormalkan ringkasan, dan menghasilkan +artifact stabil yang menghadap mesin di bawah: + +- `.openclaw-wiki/cache/agent-digest.json` +- `.openclaw-wiki/cache/claims.jsonl` + +Digest ini ada agar agent dan kode runtime tidak perlu mengikis halaman +Markdown. + +Output terkompilasi juga mendukung: + +- pengindeksan wiki lintasan pertama untuk alur search/get +- lookup claim-id kembali ke halaman pemiliknya +- suplemen prompt yang ringkas +- pembuatan laporan/dasbor + +## Dasbor dan laporan kesehatan + +Saat `render.createDashboards` diaktifkan, compile memelihara dasbor di bawah +`reports/`. + +Laporan bawaan mencakup: + +- `reports/open-questions.md` +- `reports/contradictions.md` +- `reports/low-confidence.md` +- `reports/claim-health.md` +- `reports/stale-pages.md` + +Laporan ini melacak hal-hal seperti: + +- cluster catatan contradiction +- cluster klaim yang saling bersaing +- klaim yang tidak memiliki bukti terstruktur +- halaman dan klaim dengan confidence rendah +- kesegaran basi atau tidak diketahui +- halaman dengan pertanyaan yang belum terselesaikan + +## Pencarian dan pengambilan + +`memory-wiki` mendukung dua backend pencarian: + +- `shared`: gunakan alur pencarian memori bersama jika tersedia +- `local`: cari wiki secara lokal + +Plugin ini juga mendukung tiga corpus: + +- `wiki` +- `memory` +- `all` + +Perilaku penting: + +- `wiki_search` dan `wiki_get` menggunakan digest terkompilasi sebagai lintasan + pertama jika memungkinkan +- id klaim dapat diselesaikan kembali ke halaman pemiliknya +- klaim contested/stale/fresh memengaruhi ranking +- label provenance dapat dipertahankan hingga ke hasil + +Aturan praktis: + +- gunakan `memory_search corpus=all` untuk satu lintasan recall yang luas +- gunakan `wiki_search` + `wiki_get` ketika Anda peduli pada ranking khusus + wiki, provenance, atau struktur keyakinan tingkat halaman + +## Tool agent + +Plugin mendaftarkan tool berikut: + +- `wiki_status` +- `wiki_search` +- `wiki_get` +- `wiki_apply` +- `wiki_lint` + +Fungsinya: + +- `wiki_status`: mode brankas saat ini, kesehatan, ketersediaan CLI Obsidian +- `wiki_search`: mencari halaman wiki dan, saat dikonfigurasi, corpus memori bersama +- `wiki_get`: membaca halaman wiki berdasarkan id/path atau fallback ke corpus memori bersama +- `wiki_apply`: mutasi sintesis/metadata sempit tanpa operasi bebas pada halaman +- `wiki_lint`: pemeriksaan struktural, celah provenance, contradiction, open question + +Plugin ini juga mendaftarkan suplemen corpus memori non-eksklusif, sehingga +`memory_search` dan `memory_get` bersama dapat menjangkau wiki saat plugin +memori aktif mendukung pemilihan corpus. + +## Perilaku prompt dan konteks + +Saat `context.includeCompiledDigestPrompt` diaktifkan, bagian prompt memori +menambahkan snapshot terkompilasi yang ringkas dari `agent-digest.json`. + +Snapshot itu sengaja kecil dan bernilai sinyal tinggi: + +- hanya halaman teratas +- hanya klaim teratas +- jumlah contradiction +- jumlah pertanyaan +- qualifier confidence/freshness + +Ini bersifat opt-in karena mengubah bentuk prompt dan terutama berguna untuk +engine konteks atau perakitan prompt lama yang secara eksplisit mengonsumsi +suplemen memori. + +## Konfigurasi + +Tempatkan konfigurasi di bawah `plugins.entries.memory-wiki.config`: + +```json5 +{ + plugins: { + entries: { + "memory-wiki": { + enabled: true, + config: { + vaultMode: "isolated", + vault: { + path: "~/.openclaw/wiki/main", + renderMode: "obsidian", + }, + obsidian: { + enabled: true, + useOfficialCli: true, + vaultName: "OpenClaw Wiki", + openAfterWrites: false, + }, + bridge: { + enabled: false, + readMemoryArtifacts: true, + indexDreamReports: true, + indexDailyNotes: true, + indexMemoryRoot: true, + followMemoryEvents: true, + }, + ingest: { + autoCompile: true, + maxConcurrentJobs: 1, + allowUrlIngest: true, + }, + search: { + backend: "shared", + corpus: "wiki", + }, + context: { + includeCompiledDigestPrompt: false, + }, + render: { + preserveHumanBlocks: true, + createBacklinks: true, + createDashboards: true, + }, + }, + }, + }, + }, +} +``` + +Toggle utama: + +- `vaultMode`: `isolated`, `bridge`, `unsafe-local` +- `vault.renderMode`: `native` atau `obsidian` +- `bridge.readMemoryArtifacts`: impor artifact publik plugin memori aktif +- `bridge.followMemoryEvents`: sertakan log event dalam mode bridge +- `search.backend`: `shared` atau `local` +- `search.corpus`: `wiki`, `memory`, atau `all` +- `context.includeCompiledDigestPrompt`: tambahkan snapshot digest ringkas ke bagian prompt memori +- `render.createBacklinks`: hasilkan blok terkait yang deterministik +- `render.createDashboards`: hasilkan halaman dasbor + +## CLI + +`memory-wiki` juga mengekspos permukaan CLI tingkat atas: + +```bash +openclaw wiki status +openclaw wiki doctor +openclaw wiki init +openclaw wiki ingest ./notes/alpha.md +openclaw wiki compile +openclaw wiki lint +openclaw wiki search "alpha" +openclaw wiki get entity.alpha +openclaw wiki apply synthesis "Alpha Summary" --body "..." --source-id source.alpha +openclaw wiki bridge import +openclaw wiki obsidian status +``` + +Lihat [CLI: wiki](/cli/wiki) untuk referensi perintah lengkap. + +## Dukungan Obsidian + +Saat `vault.renderMode` adalah `obsidian`, plugin menulis Markdown yang ramah +Obsidian dan dapat secara opsional menggunakan CLI `obsidian` resmi. + +Alur kerja yang didukung mencakup: + +- probe status +- pencarian brankas +- membuka halaman +- memanggil perintah Obsidian +- melompat ke catatan harian + +Ini bersifat opsional. Wiki tetap berfungsi dalam mode native tanpa Obsidian. + +## Alur kerja yang direkomendasikan + +1. Pertahankan plugin memori aktif Anda untuk recall/promotion/dreaming. +2. Aktifkan `memory-wiki`. +3. Mulailah dengan mode `isolated` kecuali Anda secara eksplisit menginginkan mode bridge. +4. Gunakan `wiki_search` / `wiki_get` saat provenance penting. +5. Gunakan `wiki_apply` untuk sintesis sempit atau pembaruan metadata. +6. Jalankan `wiki_lint` setelah perubahan yang bermakna. +7. Aktifkan dasbor jika Anda menginginkan visibilitas stale/contradiction. + +## Dokumen terkait + +- [Ikhtisar Memori](/id/concepts/memory) +- [CLI: memory](/cli/memory) +- [CLI: wiki](/cli/wiki) +- [Ikhtisar SDK Plugin](/id/plugins/sdk-overview) diff --git a/docs/id/providers/glm.md b/docs/id/providers/glm.md index 675bea0fb..9e4d3e735 100644 --- a/docs/id/providers/glm.md +++ b/docs/id/providers/glm.md @@ -1,14 +1,14 @@ --- read_when: - - Anda menginginkan model GLM di OpenClaw + - Anda ingin model GLM di OpenClaw - Anda memerlukan konvensi penamaan model dan penyiapannya summary: Ikhtisar keluarga model GLM + cara menggunakannya di OpenClaw title: Model GLM x-i18n: - generated_at: "2026-04-05T14:03:20Z" + generated_at: "2026-04-08T06:00:59Z" model: gpt-5.4 provider: openai - source_hash: 59622edab5094d991987f9788fbf08b33325e737e7ff88632b0c3ac89412d4c7 + source_hash: 79a55acfa139847b4b85dbc09f1068cbd2febb1e49f984a23ea9e3b43bc910eb source_path: providers/glm.md workflow: 15 --- @@ -21,7 +21,7 @@ GLM diakses melalui provider `zai` dan ID model seperti `zai/glm-5`. ## Penyiapan CLI ```bash -# Penyiapan API key generik dengan deteksi endpoint otomatis +# Penyiapan kunci API generik dengan deteksi endpoint otomatis openclaw onboard --auth-choice zai-api-key # Coding Plan Global, direkomendasikan untuk pengguna Coding Plan @@ -42,17 +42,17 @@ openclaw onboard --auth-choice zai-cn ```json5 { env: { ZAI_API_KEY: "sk-..." }, - agents: { defaults: { model: { primary: "zai/glm-5" } } }, + agents: { defaults: { model: { primary: "zai/glm-5.1" } } }, } ``` -`zai-api-key` memungkinkan OpenClaw mendeteksi endpoint Z.AI yang cocok dari key tersebut dan -menerapkan base URL yang benar secara otomatis. Gunakan pilihan regional eksplisit saat -Anda ingin memaksa permukaan Coding Plan atau API umum tertentu. +`zai-api-key` memungkinkan OpenClaw mendeteksi endpoint Z.AI yang cocok dari kunci tersebut dan +menerapkan base URL yang benar secara otomatis. Gunakan pilihan regional eksplisit jika +Anda ingin memaksakan Coding Plan tertentu atau permukaan API umum tertentu. ## Model GLM bawaan saat ini -OpenClaw saat ini mengisi provider `zai` bawaan dengan referensi GLM berikut: +OpenClaw saat ini menginisialisasi provider `zai` bawaan dengan referensi GLM berikut: - `glm-5.1` - `glm-5` @@ -71,5 +71,5 @@ OpenClaw saat ini mengisi provider `zai` bawaan dengan referensi GLM berikut: ## Catatan - Versi dan ketersediaan GLM dapat berubah; periksa dokumentasi Z.AI untuk yang terbaru. -- Referensi model bawaan default adalah `zai/glm-5`. -- Untuk detail provider, lihat [/providers/zai](/providers/zai). +- Referensi model bawaan default adalah `zai/glm-5.1`. +- Untuk detail provider, lihat [/providers/zai](/id/providers/zai). diff --git a/docs/id/providers/zai.md b/docs/id/providers/zai.md index bf4b015fc..05d39d29c 100644 --- a/docs/id/providers/zai.md +++ b/docs/id/providers/zai.md @@ -1,55 +1,55 @@ --- read_when: - - Anda ingin menggunakan model Z.AI / GLM di OpenClaw - - Anda memerlukan penyiapan sederhana ZAI_API_KEY + - Anda ingin menggunakan Z.AI / model GLM di OpenClaw + - Anda memerlukan penyiapan `ZAI_API_KEY` yang sederhana summary: Gunakan Z.AI (model GLM) dengan OpenClaw title: Z.AI x-i18n: - generated_at: "2026-04-05T14:04:25Z" + generated_at: "2026-04-08T06:01:07Z" model: gpt-5.4 provider: openai - source_hash: 48006cdd580484f0c62e2877b27a6a68d7bc44795b3e97a28213d95182d9acf9 + source_hash: 66cbd9813ee28d202dcae34debab1b0cf9927793acb00743c1c62b48d9e381f9 source_path: providers/zai.md workflow: 15 --- # Z.AI -Z.AI adalah platform API untuk model **GLM**. Platform ini menyediakan REST API untuk GLM dan menggunakan API key -untuk autentikasi. Buat API key Anda di konsol Z.AI. OpenClaw menggunakan provider `zai` -dengan API key Z.AI. +Z.AI adalah platform API untuk model **GLM**. Platform ini menyediakan REST API untuk GLM dan menggunakan kunci API +untuk autentikasi. Buat kunci API Anda di konsol Z.AI. OpenClaw menggunakan provider `zai` +dengan kunci API Z.AI. ## Penyiapan CLI ```bash -# Penyiapan API key umum dengan deteksi endpoint otomatis +# Penyiapan kunci API generik dengan deteksi otomatis endpoint openclaw onboard --auth-choice zai-api-key # Coding Plan Global, direkomendasikan untuk pengguna Coding Plan openclaw onboard --auth-choice zai-coding-global -# Coding Plan CN (region China), direkomendasikan untuk pengguna Coding Plan +# Coding Plan CN (wilayah Tiongkok), direkomendasikan untuk pengguna Coding Plan openclaw onboard --auth-choice zai-coding-cn # API umum openclaw onboard --auth-choice zai-global -# API umum CN (region China) +# API umum CN (wilayah Tiongkok) openclaw onboard --auth-choice zai-cn ``` -## Cuplikan config +## Cuplikan konfigurasi ```json5 { env: { ZAI_API_KEY: "sk-..." }, - agents: { defaults: { model: { primary: "zai/glm-5" } } }, + agents: { defaults: { model: { primary: "zai/glm-5.1" } } }, } ``` -`zai-api-key` memungkinkan OpenClaw mendeteksi endpoint Z.AI yang cocok dari key tersebut dan -menerapkan base URL yang benar secara otomatis. Gunakan pilihan regional eksplisit ketika -Anda ingin memaksa permukaan Coding Plan atau API umum tertentu. +`zai-api-key` memungkinkan OpenClaw mendeteksi endpoint Z.AI yang cocok dari kunci tersebut dan +menerapkan URL dasar yang benar secara otomatis. Gunakan pilihan regional yang eksplisit saat +Anda ingin memaksakan permukaan Coding Plan atau API umum tertentu. ## Katalog GLM bawaan @@ -72,11 +72,11 @@ Saat ini OpenClaw mengisi provider `zai` bawaan dengan: ## Catatan - Model GLM tersedia sebagai `zai/` (contoh: `zai/glm-5`). -- Referensi model bawaan default: `zai/glm-5` -- ID `glm-5*` yang tidak dikenal tetap di-resolve ke depan pada jalur provider bawaan dengan - mensintesis metadata milik provider dari template `glm-4.7` ketika ID tersebut +- Referensi model bawaan default: `zai/glm-5.1` +- ID `glm-5*` yang tidak dikenal tetap di-resolve secara forward pada jalur provider bawaan dengan + menyintesis metadata milik provider dari template `glm-4.7` saat ID tersebut cocok dengan bentuk keluarga GLM-5 saat ini. -- `tool_stream` diaktifkan secara default untuk streaming tool-call Z.AI. Setel +- `tool_stream` diaktifkan secara default untuk streaming pemanggilan alat Z.AI. Setel `agents.defaults.models["zai/"].params.tool_stream` ke `false` untuk menonaktifkannya. -- Lihat [/providers/glm](/providers/glm) untuk gambaran umum keluarga model. -- Z.AI menggunakan auth Bearer dengan API key Anda. +- Lihat [/providers/glm](/id/providers/glm) untuk ikhtisar keluarga model. +- Z.AI menggunakan autentikasi Bearer dengan kunci API Anda. diff --git a/docs/id/refactor/qa.md b/docs/id/refactor/qa.md index edb75245a..40e221e38 100644 --- a/docs/id/refactor/qa.md +++ b/docs/id/refactor/qa.md @@ -1,9 +1,9 @@ --- x-i18n: - generated_at: "2026-04-08T02:17:41Z" + generated_at: "2026-04-08T06:01:43Z" model: gpt-5.4 provider: openai - source_hash: 0e156cc8e2fe946a0423862f937754a7caa1fe7e6863b50a80bff49a1c86e1e8 + source_hash: 4a9066b2a939c5a9ba69141d75405f0e8097997b523164340e2f0e9a0d5060dd source_path: refactor/qa.md workflow: 15 --- @@ -14,39 +14,43 @@ Status: migrasi fondasional telah diterapkan. ## Tujuan -Pindahkan QA OpenClaw dari model definisi terpisah ke satu sumber kebenaran: +Memindahkan QA OpenClaw dari model definisi terpisah ke satu sumber kebenaran: - metadata skenario - prompt yang dikirim ke model - setup dan teardown - logika harness -- assertion dan kriteria keberhasilan +- asersi dan kriteria keberhasilan - artefak dan petunjuk laporan Keadaan akhir yang diinginkan adalah harness QA generik yang memuat file definisi skenario yang kuat alih-alih meng-hardcode sebagian besar perilaku di TypeScript. -## Kondisi Saat Ini +## Status Saat Ini -Sumber kebenaran utama sekarang berada di `qa/scenarios.md`. +Sumber kebenaran utama sekarang berada di `qa/scenarios/index.md` ditambah satu file per +skenario di bawah `qa/scenarios/*.md`. -Yang sudah diimplementasikan: +Yang sudah diterapkan: -- `qa/scenarios.md` - - paket QA kanonis +- `qa/scenarios/index.md` + - metadata paket QA kanonis - identitas operator - - misi kickoff + - misi awal +- `qa/scenarios/*.md` + - satu file markdown per skenario - metadata skenario - binding handler + - konfigurasi eksekusi spesifik skenario - `extensions/qa-lab/src/scenario-catalog.ts` - parser paket markdown + validasi zod - `extensions/qa-lab/src/qa-agent-bootstrap.ts` - rendering rencana dari paket markdown - `extensions/qa-lab/src/qa-agent-workspace.ts` - - menanam file kompatibilitas yang dihasilkan plus `QA_SCENARIOS.md` + - seed file kompatibilitas yang dihasilkan plus `QA_SCENARIOS.md` - `extensions/qa-lab/src/suite.ts` - memilih skenario yang dapat dieksekusi melalui binding handler yang didefinisikan di markdown -- Protokol bus QA + UI - - attachment inline generik untuk rendering image/video/audio/file +- protokol bus QA + UI + - lampiran inline generik untuk rendering gambar/video/audio/file Permukaan terpisah yang masih tersisa: @@ -55,7 +59,7 @@ Permukaan terpisah yang masih tersisa: - `extensions/qa-lab/src/report.ts` - masih menurunkan struktur laporan dari output runtime -Jadi pemisahan sumber kebenaran sudah diperbaiki, tetapi eksekusi masih sebagian besar didukung handler, belum sepenuhnya deklaratif. +Jadi pembagian sumber kebenaran sudah diperbaiki, tetapi eksekusi masih sebagian besar didukung handler, bukan sepenuhnya deklaratif. ## Seperti Apa Permukaan Skenario Nyata @@ -67,55 +71,55 @@ Membaca suite saat ini menunjukkan beberapa kelas skenario yang berbeda. - baseline DM - tindak lanjut ber-thread - pergantian model -- kelanjutan approval -- reaction/edit/delete +- tindak lanjut persetujuan +- reaksi/edit/hapus -### Mutasi config dan runtime +### Mutasi konfigurasi dan runtime -- menonaktifkan skill dengan patch config -- config apply restart wake-up +- penonaktifan skill lewat patch config +- apply config restart wake-up - pembalikan kapabilitas saat restart config - pemeriksaan drift inventaris runtime -### Assertion filesystem dan repo +### Asersi filesystem dan repo -- laporan penemuan source/docs +- laporan penemuan source/dokumen - build Lobster Invaders - pencarian artefak gambar yang dihasilkan ### Orkestrasi memori -- memory recall +- pemanggilan memori - tool memori dalam konteks channel - fallback kegagalan memori -- pemeringkatan memori sesi +- peringkat memori sesi - isolasi memori thread - memory dreaming sweep ### Integrasi tool dan plugin -- panggilan MCP plugin-tools +- panggilan plugin-tools MCP - visibilitas skill - hot install skill - pembuatan gambar native - image roundtrip -- pemahaman gambar dari attachment +- pemahaman gambar dari lampiran ### Multi-turn dan multi-aktor -- handoff subagent -- sintesis fanout subagent -- alur bergaya pemulihan restart +- handoff subagen +- sintesis fanout subagen +- alur bergaya pemulihan setelah restart -Kategori ini penting karena mendorong kebutuhan DSL. Daftar datar prompt + teks yang diharapkan saja tidak cukup. +Kategori-kategori ini penting karena mendorong kebutuhan DSL. Daftar datar berisi prompt + teks yang diharapkan saja tidak cukup. ## Arah ### Satu sumber kebenaran -Gunakan `qa/scenarios.md` sebagai sumber kebenaran yang ditulis. +Gunakan `qa/scenarios/index.md` ditambah `qa/scenarios/*.md` sebagai sumber kebenaran yang ditulis. -Paket tersebut harus tetap: +Paket harus tetap: - mudah dibaca manusia dalam review - dapat di-parse mesin @@ -126,21 +130,21 @@ Paket tersebut harus tetap: - prompt docs/discovery - pembuatan laporan -### Format penulisan yang disukai +### Format penulisan yang disarankan Gunakan markdown sebagai format tingkat atas, dengan YAML terstruktur di dalamnya. Bentuk yang direkomendasikan: -- YAML frontmatter +- frontmatter YAML - id - title - surface - tags - - refs docs - - refs code + - referensi dokumen + - referensi kode - override model/provider - - prerequisite + - prasyarat - bagian prosa - objective - notes @@ -157,7 +161,7 @@ Ini memberikan: - konteks yang lebih kaya daripada YAML murni - parsing ketat dan validasi zod -JSON mentah dapat diterima hanya sebagai bentuk perantara yang dihasilkan. +JSON mentah dapat diterima hanya sebagai bentuk hasil generate antara. ## Bentuk File Skenario yang Diusulkan @@ -232,11 +236,11 @@ Verify generated media is reattached on the follow-up turn. ``` ```` -## Kapabilitas Runner yang Harus Dicakup DSL +## Kemampuan Runner yang Harus Dicakup DSL -Berdasarkan suite saat ini, runner generik membutuhkan lebih dari sekadar eksekusi prompt. +Berdasarkan suite saat ini, runner generik memerlukan lebih dari sekadar eksekusi prompt. -### Action environment dan setup +### Tindakan environment dan setup - `bus.reset` - `gateway.waitHealthy` @@ -245,14 +249,14 @@ Berdasarkan suite saat ini, runner generik membutuhkan lebih dari sekadar ekseku - `thread.create` - `workspace.writeSkill` -### Action giliran agen +### Tindakan giliran agen - `agent.send` - `agent.wait` - `bus.injectInbound` - `bus.injectOutbound` -### Action config dan runtime +### Tindakan konfigurasi dan runtime - `config.get` - `config.patch` @@ -261,7 +265,7 @@ Berdasarkan suite saat ini, runner generik membutuhkan lebih dari sekadar ekseku - `tools.effective` - `skills.status` -### Action file dan artefak +### Tindakan file dan artefak - `file.write` - `file.read` @@ -270,7 +274,7 @@ Berdasarkan suite saat ini, runner generik membutuhkan lebih dari sekadar ekseku - `artifact.captureGeneratedImage` - `artifact.capturePath` -### Action memori dan cron +### Tindakan memori dan cron - `memory.indexForce` - `memory.searchCli` @@ -280,11 +284,11 @@ Berdasarkan suite saat ini, runner generik membutuhkan lebih dari sekadar ekseku - `cron.waitCompletion` - `sessionTranscript.write` -### Action MCP +### Tindakan MCP - `mcp.callTool` -### Assertion +### Asersi - `outbound.textIncludes` - `outbound.inThread` @@ -306,17 +310,17 @@ DSL harus mendukung output yang disimpan dan referensi berikutnya. Contoh dari suite saat ini: -- buat thread, lalu gunakan kembali `threadId` -- buat sesi, lalu gunakan kembali `sessionKey` -- hasilkan gambar, lalu lampirkan file pada giliran berikutnya -- hasilkan string wake marker, lalu assert bahwa string itu muncul nanti +- membuat thread, lalu menggunakan ulang `threadId` +- membuat sesi, lalu menggunakan ulang `sessionKey` +- menghasilkan gambar, lalu melampirkan file pada giliran berikutnya +- menghasilkan string penanda wake, lalu mengasertikan bahwa string itu muncul nanti -Kapabilitas yang dibutuhkan: +Kemampuan yang dibutuhkan: - `saveAs` - `${vars.name}` - `${artifacts.name}` -- referensi bertipe untuk path, key sesi, ID thread, marker, output tool +- referensi bertipe untuk path, kunci sesi, id thread, penanda, output tool Tanpa dukungan variabel, harness akan terus membocorkan logika skenario kembali ke TypeScript. @@ -324,22 +328,22 @@ Tanpa dukungan variabel, harness akan terus membocorkan logika skenario kembali Runner deklaratif yang sepenuhnya murni tidak realistis pada fase 1. -Beberapa skenario memang secara inheren berat pada orkestrasi: +Beberapa skenario secara inheren berat pada orkestrasi: - memory dreaming sweep - config apply restart wake-up -- pembalikan kapabilitas saat restart config +- config restart capability flip - resolusi artefak gambar yang dihasilkan berdasarkan timestamp/path - evaluasi discovery-report -Untuk saat ini, skenario ini harus menggunakan handler kustom eksplisit. +Untuk saat ini, ini sebaiknya menggunakan handler kustom eksplisit. Aturan yang direkomendasikan: - 85-90% deklaratif -- `customHandler` steps eksplisit untuk sisa yang sulit -- hanya handler kustom yang bernama dan terdokumentasi -- tidak ada kode inline anonim dalam file skenario +- langkah `customHandler` eksplisit untuk sisa yang sulit +- hanya handler kustom bernama dan terdokumentasi +- tidak ada kode inline anonim di file skenario Itu menjaga engine generik tetap bersih sambil tetap memungkinkan kemajuan. @@ -357,77 +361,78 @@ Markdown skenario sudah menjadi sumber kebenaran untuk: Kompatibilitas yang dihasilkan: -- workspace yang ditanam masih menyertakan `QA_KICKOFF_TASK.md` -- workspace yang ditanam masih menyertakan `QA_SCENARIO_PLAN.md` -- workspace yang ditanam sekarang juga menyertakan `QA_SCENARIOS.md` +- workspace seeded masih menyertakan `QA_KICKOFF_TASK.md` +- workspace seeded masih menyertakan `QA_SCENARIO_PLAN.md` +- workspace seeded sekarang juga menyertakan `QA_SCENARIOS.md` ## Rencana Refaktor -### Fase 1: loader dan schema +### Fase 1: loader dan skema Selesai. -- menambahkan `qa/scenarios.md` +- menambahkan `qa/scenarios/index.md` +- memisahkan skenario ke `qa/scenarios/*.md` - menambahkan parser untuk konten paket YAML markdown bernama - memvalidasi dengan zod -- mengalihkan consumer ke paket yang sudah di-parse -- menghapus `qa/seed-scenarios.json` dan `qa/QA_KICKOFF_TASK.md` tingkat repo +- mengganti konsumen ke paket yang telah di-parse +- menghapus `qa/seed-scenarios.json` dan `qa/QA_KICKOFF_TASK.md` di tingkat repo ### Fase 2: engine generik -- pecah `extensions/qa-lab/src/suite.ts` menjadi: +- memisahkan `extensions/qa-lab/src/suite.ts` menjadi: - loader - engine - - registry action - - registry assertion + - registry tindakan + - registry asersi - handler kustom -- pertahankan fungsi helper yang ada sebagai operasi engine +- mempertahankan fungsi helper yang ada sebagai operasi engine Hasil kerja: - engine mengeksekusi skenario deklaratif sederhana -Mulai dengan skenario yang sebagian besar berupa prompt + wait + assert: +Mulai dengan skenario yang sebagian besar berupa prompt + tunggu + asersi: - tindak lanjut ber-thread -- pemahaman gambar dari attachment +- pemahaman gambar dari lampiran - visibilitas dan pemanggilan skill - baseline channel Hasil kerja: -- skenario nyata pertama yang didefinisikan di markdown dikirim melalui engine generik +- skenario pertama yang benar-benar didefinisikan dalam markdown dikirim melalui engine generik ### Fase 4: migrasikan skenario tingkat menengah - image generation roundtrip - tool memori dalam konteks channel -- pemeringkatan memori sesi -- handoff subagent -- sintesis fanout subagent +- peringkat memori sesi +- handoff subagen +- sintesis fanout subagen Hasil kerja: -- variabel, artefak, assertion tool, assertion request-log terbukti berjalan +- variabel, artefak, asersi tool, dan asersi request-log terbukti berfungsi -### Fase 5: pertahankan skenario sulit pada handler kustom +### Fase 5: biarkan skenario sulit tetap memakai handler kustom - memory dreaming sweep - config apply restart wake-up -- pembalikan kapabilitas saat restart config -- runtime inventory drift +- config restart capability flip +- drift inventaris runtime Hasil kerja: -- format penulisan yang sama, tetapi dengan blok custom-step eksplisit bila diperlukan +- format penulisan yang sama, tetapi dengan blok langkah kustom eksplisit saat diperlukan -### Fase 6: hapus peta skenario yang di-hardcode +### Fase 6: hapus map skenario yang di-hardcode Setelah cakupan paket cukup baik: -- hapus sebagian besar percabangan TypeScript khusus skenario dari `extensions/qa-lab/src/suite.ts` +- hapus sebagian besar percabangan TypeScript spesifik skenario dari `extensions/qa-lab/src/suite.ts` -## Dukungan Fake Slack / Rich Media +## Slack Palsu / Dukungan Media Kaya Bus QA saat ini berfokus pada teks. @@ -442,14 +447,14 @@ File yang relevan: Saat ini bus QA mendukung: - teks -- reaction +- reaksi - thread -Bus ini belum memodelkan attachment media inline. +Bus ini belum memodelkan lampiran media inline. ### Kontrak transport yang dibutuhkan -Tambahkan model attachment bus QA generik: +Tambahkan model lampiran bus QA generik: ```ts type QaBusAttachment = { @@ -474,61 +479,61 @@ Lalu tambahkan `attachments?: QaBusAttachment[]` ke: - `QaBusInboundMessageInput` - `QaBusOutboundMessageInput` -### Mengapa generik terlebih dahulu +### Mengapa generik dulu -Jangan membangun model media yang khusus Slack saja. +Jangan membangun model media khusus Slack. Sebaliknya: - satu model transport QA generik - beberapa renderer di atasnya - chat QA Lab saat ini - - web Slack palsu di masa depan + - fake Slack web di masa depan - tampilan transport palsu lainnya -Ini mencegah logika duplikat dan memungkinkan skenario media tetap agnostik terhadap transport. +Ini mencegah duplikasi logika dan memungkinkan skenario media tetap agnostik terhadap transport. ### Pekerjaan UI yang dibutuhkan -Perbarui UI QA agar merender: +Perbarui UI QA untuk merender: - pratinjau gambar inline - pemutar audio inline - pemutar video inline -- chip attachment file +- chip lampiran file -UI saat ini sudah dapat merender thread dan reaction, jadi rendering attachment seharusnya dapat dilapiskan ke model kartu pesan yang sama. +UI saat ini sudah dapat merender thread dan reaksi, jadi rendering lampiran seharusnya dapat dilapiskan ke model kartu pesan yang sama. ### Pekerjaan skenario yang dimungkinkan oleh transport media -Setelah attachment mengalir melalui bus QA, kita dapat menambahkan skenario fake-chat yang lebih kaya: +Setelah lampiran mengalir melalui bus QA, kita dapat menambahkan skenario fake-chat yang lebih kaya: - balasan gambar inline di fake Slack -- pemahaman attachment audio -- pemahaman attachment video -- urutan attachment campuran -- balasan thread dengan media tetap dipertahankan +- pemahaman lampiran audio +- pemahaman lampiran video +- pengurutan lampiran campuran +- balasan thread dengan media yang dipertahankan ## Rekomendasi -Bagian implementasi berikutnya seharusnya adalah: +Bagian implementasi berikutnya sebaiknya adalah: -1. tambahkan loader skenario markdown + schema zod -2. hasilkan katalog saat ini dari markdown -3. migrasikan beberapa skenario sederhana terlebih dahulu -4. tambahkan dukungan attachment bus QA generik -5. render gambar inline di UI QA -6. lalu perluas ke audio dan video +1. menambahkan loader skenario markdown + skema zod +2. menghasilkan katalog saat ini dari markdown +3. memigrasikan beberapa skenario sederhana terlebih dahulu +4. menambahkan dukungan lampiran bus QA generik +5. merender gambar inline di UI QA +6. lalu memperluas ke audio dan video Ini adalah jalur terkecil yang membuktikan kedua tujuan: -- QA generik yang didefinisikan di markdown -- permukaan messaging palsu yang lebih kaya +- QA generik yang didefinisikan dengan markdown +- permukaan pesan palsu yang lebih kaya ## Pertanyaan Terbuka -- apakah file skenario sebaiknya mengizinkan template prompt markdown tertanam dengan interpolasi variabel -- apakah setup/cleanup sebaiknya berupa bagian bernama atau hanya daftar action berurutan -- apakah referensi artefak sebaiknya bertipe kuat di schema atau berbasis string -- apakah handler kustom sebaiknya berada dalam satu registry atau registry per-surface -- apakah file kompatibilitas JSON yang dihasilkan sebaiknya tetap dicentang selama migrasi +- apakah file skenario sebaiknya mengizinkan templat prompt markdown tertanam dengan interpolasi variabel +- apakah setup/cleanup sebaiknya berupa bagian bernama atau hanya daftar tindakan berurutan +- apakah referensi artefak sebaiknya bertipe kuat di skema atau berbasis string +- apakah handler kustom sebaiknya berada dalam satu registry atau registry per permukaan +- apakah file kompatibilitas JSON yang dihasilkan sebaiknya tetap di-check-in selama migrasi diff --git a/docs/id/tools/slash-commands.md b/docs/id/tools/slash-commands.md index c4da19f7b..039ed157a 100644 --- a/docs/id/tools/slash-commands.md +++ b/docs/id/tools/slash-commands.md @@ -1,14 +1,14 @@ --- read_when: - Menggunakan atau mengonfigurasi perintah chat - - Men-debug perutean atau izin perintah + - Men-debug perutean perintah atau izin summary: 'Slash command: teks vs native, config, dan perintah yang didukung' title: Slash Commands x-i18n: - generated_at: "2026-04-06T03:13:07Z" + generated_at: "2026-04-08T06:02:13Z" model: gpt-5.4 provider: openai - source_hash: 417e35b9ddd87f25f6c019111b55b741046ea11039dde89210948185ced5696d + source_hash: 4a7ee7f1a8012058279b9e632889b291d4e659e4ec81209ca8978afbb9ad4b96 source_path: tools/slash-commands.md workflow: 15 --- @@ -21,16 +21,16 @@ Perintah chat bash khusus host menggunakan `! ` (dengan `/bash ` sebag Ada dua sistem yang terkait: - **Perintah**: pesan mandiri `/...`. -- **Directive**: `/think`, `/fast`, `/verbose`, `/reasoning`, `/elevated`, `/exec`, `/model`, `/queue`. - - Directive dihapus dari pesan sebelum model melihatnya. - - Dalam pesan chat normal (bukan hanya directive), directive diperlakukan sebagai “petunjuk inline” dan **tidak** menyimpan setelan sesi. - - Dalam pesan yang hanya berisi directive (pesan hanya berisi directive), directive disimpan ke sesi dan membalas dengan pengakuan. - - Directive hanya diterapkan untuk **pengirim yang diotorisasi**. Jika `commands.allowFrom` disetel, itu adalah satu-satunya - allowlist yang digunakan; jika tidak, otorisasi berasal dari allowlist/pairing channel plus `commands.useAccessGroups`. - Pengirim yang tidak diotorisasi akan melihat directive diperlakukan sebagai teks biasa. +- **Direktif**: `/think`, `/fast`, `/verbose`, `/reasoning`, `/elevated`, `/exec`, `/model`, `/queue`. + - Direktif dihapus dari pesan sebelum model melihatnya. + - Dalam pesan chat normal (bukan hanya direktif), direktif diperlakukan sebagai “petunjuk inline” dan **tidak** menyimpan pengaturan sesi. + - Dalam pesan yang hanya berisi direktif (pesan hanya berisi direktif), direktif disimpan ke sesi dan membalas dengan pengakuan. + - Direktif hanya diterapkan untuk **pengirim yang diotorisasi**. Jika `commands.allowFrom` disetel, itu adalah satu-satunya + allowlist yang digunakan; jika tidak, otorisasi berasal dari allowlist/pairing kanal ditambah `commands.useAccessGroups`. + Pengirim yang tidak diotorisasi akan melihat direktif diperlakukan sebagai teks biasa. -Ada juga beberapa **pintasan inline** (hanya untuk pengirim yang di-allowlist/diotorisasi): `/help`, `/commands`, `/status`, `/whoami` (`/id`). -Pintasan ini langsung dijalankan, dihapus sebelum model melihat pesan, dan teks yang tersisa melanjutkan alur normal. +Ada juga beberapa **shortcut inline** (hanya untuk pengirim yang di-allowlist/diotorisasi): `/help`, `/commands`, `/status`, `/whoami` (`/id`). +Shortcut ini langsung dijalankan, dihapus sebelum model melihat pesan, dan sisa teks melanjutkan melalui alur normal. ## Config @@ -46,7 +46,10 @@ Pintasan ini langsung dijalankan, dihapus sebelum model melihat pesan, dan teks mcp: false, plugins: false, debug: false, - restart: false, + restart: true, + ownerAllowFrom: ["discord:123456789012345678"], + ownerDisplay: "raw", + ownerDisplaySecret: "${OWNER_ID_HASH_SECRET}", allowFrom: { "*": ["user1"], discord: ["user:123"], @@ -56,148 +59,183 @@ Pintasan ini langsung dijalankan, dihapus sebelum model melihat pesan, dan teks } ``` -- `commands.text` (default `true`) mengaktifkan parsing `/...` dalam pesan chat. - - Pada permukaan tanpa native command (WhatsApp/WebChat/Signal/iMessage/Google Chat/Microsoft Teams), perintah teks tetap berfungsi bahkan jika Anda menyetelnya ke `false`. -- `commands.native` (default `"auto"`) mendaftarkan native command. +- `commands.text` (default `true`) mengaktifkan parsing `/...` di pesan chat. + - Pada surface tanpa perintah native (WhatsApp/WebChat/Signal/iMessage/Google Chat/Microsoft Teams), perintah teks tetap berfungsi meskipun Anda menyetelnya ke `false`. +- `commands.native` (default `"auto"`) mendaftarkan perintah native. - Auto: aktif untuk Discord/Telegram; nonaktif untuk Slack (sampai Anda menambahkan slash command); diabaikan untuk provider tanpa dukungan native. - Setel `channels.discord.commands.native`, `channels.telegram.commands.native`, atau `channels.slack.commands.native` untuk override per provider (bool atau `"auto"`). - - `false` menghapus perintah yang sebelumnya terdaftar di Discord/Telegram saat startup. Perintah Slack dikelola di app Slack dan tidak dihapus secara otomatis. + - `false` menghapus perintah yang sebelumnya terdaftar di Discord/Telegram saat startup. Perintah Slack dikelola di aplikasi Slack dan tidak dihapus secara otomatis. - `commands.nativeSkills` (default `"auto"`) mendaftarkan perintah **skill** secara native saat didukung. - - Auto: aktif untuk Discord/Telegram; nonaktif untuk Slack (Slack mengharuskan pembuatan satu slash command per skill). + - Auto: aktif untuk Discord/Telegram; nonaktif untuk Slack (Slack memerlukan pembuatan satu slash command per skill). - Setel `channels.discord.commands.nativeSkills`, `channels.telegram.commands.nativeSkills`, atau `channels.slack.commands.nativeSkills` untuk override per provider (bool atau `"auto"`). - `commands.bash` (default `false`) mengaktifkan `! ` untuk menjalankan perintah shell host (`/bash ` adalah alias; memerlukan allowlist `tools.elevated`). -- `commands.bashForegroundMs` (default `2000`) mengontrol berapa lama bash menunggu sebelum beralih ke mode background (`0` langsung ke background). +- `commands.bashForegroundMs` (default `2000`) mengontrol berapa lama bash menunggu sebelum beralih ke mode latar belakang (`0` langsung ke latar belakang). - `commands.config` (default `false`) mengaktifkan `/config` (membaca/menulis `openclaw.json`). - `commands.mcp` (default `false`) mengaktifkan `/mcp` (membaca/menulis config MCP yang dikelola OpenClaw di bawah `mcp.servers`). -- `commands.plugins` (default `false`) mengaktifkan `/plugins` (penemuan/status plugin plus kontrol install + enable/disable). -- `commands.debug` (default `false`) mengaktifkan `/debug` (override khusus runtime). +- `commands.plugins` (default `false`) mengaktifkan `/plugins` (penemuan/status plugin plus kontrol install + aktifkan/nonaktifkan). +- `commands.debug` (default `false`) mengaktifkan `/debug` (override hanya runtime). +- `commands.restart` (default `true`) mengaktifkan `/restart` plus aksi tool restart gateway. +- `commands.ownerAllowFrom` (opsional) menetapkan allowlist pemilik eksplisit untuk surface perintah/tool yang hanya untuk pemilik. Ini terpisah dari `commands.allowFrom`. +- `commands.ownerDisplay` mengontrol bagaimana ID pemilik muncul dalam system prompt: `raw` atau `hash`. +- `commands.ownerDisplaySecret` secara opsional menetapkan secret HMAC yang digunakan saat `commands.ownerDisplay="hash"`. - `commands.allowFrom` (opsional) menetapkan allowlist per provider untuk otorisasi perintah. Saat dikonfigurasi, ini menjadi - satu-satunya sumber otorisasi untuk perintah dan directive (`commands.useAccessGroups` - dan allowlist/pairing channel diabaikan). Gunakan `"*"` untuk default global; kunci khusus provider menimpanya. + satu-satunya sumber otorisasi untuk perintah dan direktif (allowlist/pairing kanal dan `commands.useAccessGroups` + diabaikan). Gunakan `"*"` untuk default global; kunci spesifik provider menimpanya. - `commands.useAccessGroups` (default `true`) menegakkan allowlist/kebijakan untuk perintah saat `commands.allowFrom` tidak disetel. ## Daftar perintah -Teks + native (saat diaktifkan): +Sumber kebenaran saat ini: -- `/help` -- `/commands` -- `/tools [compact|verbose]` (tampilkan apa yang dapat digunakan agent saat ini sekarang juga; `verbose` menambahkan deskripsi) -- `/skill [input]` (jalankan skill berdasarkan nama) -- `/status` (tampilkan status saat ini; mencakup penggunaan/kuota provider untuk provider model saat ini bila tersedia) -- `/tasks` (daftarkan background task untuk sesi saat ini; menampilkan detail task aktif dan terbaru dengan hitungan fallback lokal agent) -- `/allowlist` (daftarkan/tambahkan/hapus entri allowlist) -- `/approve ` (selesaikan prompt persetujuan exec; gunakan pesan persetujuan tertunda untuk keputusan yang tersedia) -- `/context [list|detail|json]` (jelaskan “context”; `detail` menampilkan ukuran per-file + per-tool + per-skill + system prompt) -- `/btw ` (ajukan pertanyaan sampingan sementara tentang sesi saat ini tanpa mengubah konteks sesi di masa depan; lihat [/tools/btw](/id/tools/btw)) -- `/export-session [path]` (alias: `/export`) (ekspor sesi saat ini ke HTML dengan system prompt lengkap) -- `/whoami` (tampilkan id pengirim Anda; alias: `/id`) -- `/session idle ` (kelola auto-unfocus karena tidak aktif untuk thread binding yang difokuskan) -- `/session max-age ` (kelola auto-unfocus hard max-age untuk thread binding yang difokuskan) -- `/subagents list|kill|log|info|send|steer|spawn` (inspeksi, kontrol, atau spawn run sub-agent untuk sesi saat ini) -- `/acp spawn|cancel|steer|close|status|set-mode|set|cwd|permissions|timeout|model|reset-options|doctor|install|sessions` (inspeksi dan kontrol sesi runtime ACP) -- `/agents` (daftar agent yang dibinding ke thread untuk sesi ini) -- `/focus ` (Discord: bind thread ini, atau thread baru, ke target sesi/subagent) -- `/unfocus` (Discord: hapus thread binding saat ini) -- `/kill ` (segera hentikan satu atau semua sub-agent yang sedang berjalan untuk sesi ini; tanpa pesan konfirmasi) -- `/steer ` (arahkan sub-agent yang sedang berjalan segera: di dalam run bila memungkinkan, jika tidak hentikan pekerjaan saat ini dan mulai ulang dengan pesan pengarahan) -- `/tell ` (alias untuk `/steer`) -- `/config show|get|set|unset` (persistenkan config ke disk, hanya pemilik; memerlukan `commands.config: true`) -- `/mcp show|get|set|unset` (kelola config server MCP OpenClaw, hanya pemilik; memerlukan `commands.mcp: true`) -- `/plugins list|show|get|install|enable|disable` (inspeksi plugin yang ditemukan, instal plugin baru, dan ubah status enable; hanya pemilik untuk penulisan; memerlukan `commands.plugins: true`) - - `/plugin` adalah alias untuk `/plugins`. - - `/plugin install ` menerima spesifikasi plugin yang sama seperti `openclaw plugins install`: path/arsip lokal, package npm, atau `clawhub:`. - - Penulisan enable/disable tetap membalas dengan petunjuk restart. Pada gateway foreground yang diawasi, OpenClaw mungkin melakukan restart itu secara otomatis tepat setelah penulisan. -- `/debug show|set|unset|reset` (override runtime, hanya pemilik; memerlukan `commands.debug: true`) -- `/usage off|tokens|full|cost` (footer penggunaan per respons atau ringkasan biaya lokal) -- `/tts off|always|inbound|tagged|status|provider|limit|summary|audio` (kontrol TTS; lihat [/tts](/id/tools/tts)) - - Discord: native command adalah `/voice` (Discord mencadangkan `/tts`); teks `/tts` tetap berfungsi. -- `/stop` -- `/restart` -- `/dock-telegram` (alias: `/dock_telegram`) (alihkah balasan ke Telegram) -- `/dock-discord` (alias: `/dock_discord`) (alihkah balasan ke Discord) -- `/dock-slack` (alias: `/dock_slack`) (alihkah balasan ke Slack) -- `/activation mention|always` (khusus grup) -- `/send on|off|inherit` (hanya pemilik) -- `/reset` atau `/new [model]` (petunjuk model opsional; sisa pesan diteruskan) -- `/think ` (pilihan dinamis menurut model/provider; alias: `/thinking`, `/t`) -- `/fast status|on|off` (menghilangkan argumen akan menampilkan status mode cepat efektif saat ini) -- `/verbose on|full|off` (alias: `/v`) -- `/reasoning on|off|stream` (alias: `/reason`; saat aktif, mengirim pesan terpisah dengan prefiks `Reasoning:`; `stream` = hanya draf Telegram) -- `/elevated on|off|ask|full` (alias: `/elev`; `full` melewati persetujuan exec) -- `/exec host= security= ask= node=` (kirim `/exec` untuk menampilkan status saat ini) -- `/model ` (alias: `/models`; atau `/` dari `agents.defaults.models.*.alias`) -- `/queue ` (ditambah opsi seperti `debounce:2s cap:25 drop:summarize`; kirim `/queue` untuk melihat setelan saat ini) -- `/bash ` (khusus host; alias untuk `! `; memerlukan `commands.bash: true` + allowlist `tools.elevated`) -- `/dreaming [on|off|status|help]` (aktifkan/nonaktifkan dreaming global atau tampilkan status; lihat [Dreaming](/concepts/dreaming)) +- built-in inti berasal dari `src/auto-reply/commands-registry.shared.ts` +- dock command yang dihasilkan berasal dari `src/auto-reply/commands-registry.data.ts` +- perintah plugin berasal dari pemanggilan `registerCommand()` plugin +- ketersediaan aktual di gateway Anda tetap bergantung pada flag config, surface kanal, dan plugin yang terinstal/diaktifkan -Hanya teks: +### Perintah built-in inti -- `/compact [instructions]` (lihat [/concepts/compaction](/id/concepts/compaction)) -- `! ` (khusus host; satu per satu; gunakan `!poll` + `!stop` untuk pekerjaan berjalan lama) -- `!poll` (periksa output / status; menerima `sessionId` opsional; `/bash poll` juga berfungsi) -- `!stop` (hentikan pekerjaan bash yang sedang berjalan; menerima `sessionId` opsional; `/bash stop` juga berfungsi) +Perintah built-in yang tersedia saat ini: + +- `/new [model]` memulai sesi baru; `/reset` adalah alias reset. +- `/compact [instructions]` memadatkan konteks sesi. Lihat [/concepts/compaction](/id/concepts/compaction). +- `/stop` membatalkan run saat ini. +- `/session idle ` dan `/session max-age ` mengelola kedaluwarsa pengikatan thread. +- `/think ` menetapkan tingkat thinking. Alias: `/thinking`, `/t`. +- `/verbose on|off|full` mengaktifkan/menonaktifkan keluaran verbose. Alias: `/v`. +- `/fast [status|on|off]` menampilkan atau menetapkan mode cepat. +- `/reasoning [on|off|stream]` mengaktifkan/menonaktifkan visibilitas reasoning. Alias: `/reason`. +- `/elevated [on|off|ask|full]` mengaktifkan/menonaktifkan mode elevated. Alias: `/elev`. +- `/exec host= security= ask= node=` menampilkan atau menetapkan default exec. +- `/model [name|#|status]` menampilkan atau menetapkan model. +- `/models [provider] [page] [limit=|size=|all]` mencantumkan provider atau model untuk sebuah provider. +- `/queue ` mengelola perilaku antrean (`steer`, `interrupt`, `followup`, `collect`, `steer-backlog`) plus opsi seperti `debounce:2s cap:25 drop:summarize`. +- `/help` menampilkan ringkasan bantuan singkat. +- `/commands` menampilkan katalog perintah yang dihasilkan. +- `/tools [compact|verbose]` menampilkan apa yang dapat digunakan agen saat ini sekarang juga. +- `/status` menampilkan status runtime, termasuk penggunaan/kuota provider saat tersedia. +- `/tasks` mencantumkan tugas latar belakang aktif/terbaru untuk sesi saat ini. +- `/context [list|detail|json]` menjelaskan bagaimana konteks dirakit. +- `/export-session [path]` mengekspor sesi saat ini ke HTML. Alias: `/export`. +- `/whoami` menampilkan ID pengirim Anda. Alias: `/id`. +- `/skill [input]` menjalankan skill berdasarkan nama. +- `/allowlist [list|add|remove] ...` mengelola entri allowlist. Hanya teks. +- `/approve ` menyelesaikan prompt persetujuan exec. +- `/btw ` mengajukan pertanyaan sampingan tanpa mengubah konteks sesi di masa depan. Lihat [/tools/btw](/id/tools/btw). +- `/subagents list|kill|log|info|send|steer|spawn` mengelola run sub-agent untuk sesi saat ini. +- `/acp spawn|cancel|steer|close|sessions|status|set-mode|set|cwd|permissions|timeout|model|reset-options|doctor|install|help` mengelola sesi ACP dan opsi runtime. +- `/focus ` mengikat thread Discord atau topik/percakapan Telegram saat ini ke target sesi. +- `/unfocus` menghapus pengikatan saat ini. +- `/agents` mencantumkan agen yang terikat ke thread untuk sesi saat ini. +- `/kill ` membatalkan satu atau semua sub-agent yang sedang berjalan. +- `/steer ` mengirim steer ke sub-agent yang sedang berjalan. Alias: `/tell`. +- `/config show|get|set|unset` membaca atau menulis `openclaw.json`. Hanya pemilik. Memerlukan `commands.config: true`. +- `/mcp show|get|set|unset` membaca atau menulis config server MCP yang dikelola OpenClaw di bawah `mcp.servers`. Hanya pemilik. Memerlukan `commands.mcp: true`. +- `/plugins list|inspect|show|get|install|enable|disable` memeriksa atau mengubah status plugin. `/plugin` adalah alias. Penulisan hanya untuk pemilik. Memerlukan `commands.plugins: true`. +- `/debug show|set|unset|reset` mengelola override config hanya runtime. Hanya pemilik. Memerlukan `commands.debug: true`. +- `/usage off|tokens|full|cost` mengontrol footer penggunaan per respons atau mencetak ringkasan biaya lokal. +- `/tts on|off|status|provider|limit|summary|audio|help` mengontrol TTS. Lihat [/tools/tts](/id/tools/tts). +- `/restart` me-restart OpenClaw saat diaktifkan. Default: aktif; setel `commands.restart: false` untuk menonaktifkannya. +- `/activation mention|always` menetapkan mode aktivasi grup. +- `/send on|off|inherit` menetapkan kebijakan kirim. Hanya pemilik. +- `/bash ` menjalankan perintah shell host. Hanya teks. Alias: `! `. Memerlukan `commands.bash: true` plus allowlist `tools.elevated`. +- `!poll [sessionId]` memeriksa job bash latar belakang. +- `!stop [sessionId]` menghentikan job bash latar belakang. + +### Dock command yang dihasilkan + +Dock command dihasilkan dari plugin kanal dengan dukungan perintah native. Set bundel saat ini: + +- `/dock-discord` (alias: `/dock_discord`) +- `/dock-mattermost` (alias: `/dock_mattermost`) +- `/dock-slack` (alias: `/dock_slack`) +- `/dock-telegram` (alias: `/dock_telegram`) + +### Perintah plugin bundel + +Plugin bundel dapat menambahkan lebih banyak slash command. Perintah bundel saat ini di repo ini: + +- `/dreaming [on|off|status|help]` mengaktifkan/menonaktifkan memory dreaming. Lihat [Dreaming](/id/concepts/dreaming). +- `/pair [qr|status|pending|approve|cleanup|notify]` mengelola alur pairing/penyiapan perangkat. Lihat [Pairing](/id/channels/pairing). +- `/phone status|arm [duration]|disarm` sementara mengaktifkan perintah node ponsel berisiko tinggi. +- `/voice status|list [limit]|set ` mengelola config suara Talk. Di Discord, nama perintah native-nya adalah `/talkvoice`. +- `/card ...` mengirim preset rich card LINE. Lihat [LINE](/id/channels/line). +- Perintah khusus QQBot: + - `/bot-ping` + - `/bot-version` + - `/bot-help` + - `/bot-upgrade` + - `/bot-logs` + +### Dynamic skill command + +Skill yang dapat dipanggil pengguna juga diekspos sebagai slash command: + +- `/skill [input]` selalu berfungsi sebagai entrypoint generik. +- skill juga dapat muncul sebagai perintah langsung seperti `/prose` ketika skill/plugin mendaftarkannya. +- pendaftaran perintah skill native dikendalikan oleh `commands.nativeSkills` dan `channels..commands.nativeSkills`. Catatan: -- Perintah menerima `:` opsional antara perintah dan argumen (misalnya `/think: high`, `/send: on`, `/help:`). -- `/new ` menerima alias model, `provider/model`, atau nama provider (fuzzy match); jika tidak ada kecocokan, teks diperlakukan sebagai body pesan. -- Untuk rincian lengkap penggunaan provider, gunakan `openclaw status --usage`. -- `/allowlist add|remove` memerlukan `commands.config=true` dan menghormati `configWrites` channel. -- Dalam channel multi-akun, `/allowlist --account ` yang menargetkan config dan `/config set channels..accounts....` juga menghormati `configWrites` akun target. +- Perintah menerima `:` opsional antara perintah dan argumen (misalnya, `/think: high`, `/send: on`, `/help:`). +- `/new ` menerima alias model, `provider/model`, atau nama provider (fuzzy match); jika tidak ada kecocokan, teks diperlakukan sebagai isi pesan. +- Untuk perincian lengkap penggunaan provider, gunakan `openclaw status --usage`. +- `/allowlist add|remove` memerlukan `commands.config=true` dan menghormati `configWrites` kanal. +- Pada kanal multi-akun, `/allowlist --account ` yang menargetkan config dan `/config set channels..accounts....` juga menghormati `configWrites` akun target. - `/usage` mengontrol footer penggunaan per respons; `/usage cost` mencetak ringkasan biaya lokal dari log sesi OpenClaw. -- `/restart` aktif secara default; setel `commands.restart: false` untuk menonaktifkannya. -- Native command khusus Discord: `/vc join|leave|status` mengontrol voice channel (memerlukan `channels.discord.voice` dan native command; tidak tersedia sebagai teks). -- Perintah Discord thread-binding (`/focus`, `/unfocus`, `/agents`, `/session idle`, `/session max-age`) memerlukan thread binding efektif diaktifkan (`session.threadBindings.enabled` dan/atau `channels.discord.threadBindings.enabled`). +- `/restart` diaktifkan secara default; setel `commands.restart: false` untuk menonaktifkannya. +- `/plugins install ` menerima spesifikasi plugin yang sama dengan `openclaw plugins install`: path/arsip lokal, paket npm, atau `clawhub:`. +- `/plugins enable|disable` memperbarui config plugin dan mungkin meminta restart. +- Perintah native khusus Discord: `/vc join|leave|status` mengontrol kanal suara (memerlukan `channels.discord.voice` dan perintah native; tidak tersedia sebagai teks). +- Perintah pengikatan thread Discord (`/focus`, `/unfocus`, `/agents`, `/session idle`, `/session max-age`) memerlukan pengikatan thread efektif diaktifkan (`session.threadBindings.enabled` dan/atau `channels.discord.threadBindings.enabled`). - Referensi perintah ACP dan perilaku runtime: [ACP Agents](/id/tools/acp-agents). -- `/verbose` ditujukan untuk debugging dan visibilitas tambahan; biarkan **nonaktif** dalam penggunaan normal. -- `/fast on|off` menyimpan override sesi. Gunakan opsi `inherit` di UI Sessions untuk menghapusnya dan fallback ke default config. -- `/fast` bersifat khusus provider: OpenAI/OpenAI Codex memetakannya ke `service_tier=priority` pada endpoint Responses native, sedangkan permintaan Anthropic publik langsung, termasuk lalu lintas terautentikasi OAuth yang dikirim ke `api.anthropic.com`, memetakannya ke `service_tier=auto` atau `standard_only`. Lihat [OpenAI](/id/providers/openai) dan [Anthropic](/id/providers/anthropic). -- Ringkasan kegagalan tool tetap ditampilkan saat relevan, tetapi teks kegagalan rinci hanya disertakan saat `/verbose` bernilai `on` atau `full`. -- `/reasoning` (dan `/verbose`) berisiko dalam pengaturan grup: keduanya dapat mengungkap reasoning internal atau output tool yang tidak Anda maksudkan untuk ditampilkan. Sebaiknya biarkan nonaktif, terutama di chat grup. -- `/model` segera menyimpan model sesi baru. -- Jika agent sedang idle, run berikutnya langsung menggunakannya. -- Jika run sudah aktif, OpenClaw menandai live switch sebagai tertunda dan hanya memulai ulang ke model baru pada titik retry yang bersih. -- Jika aktivitas tool atau output balasan sudah dimulai, live switch tertunda dapat tetap antre sampai kesempatan retry berikutnya atau giliran pengguna berikutnya. -- **Jalur cepat:** pesan khusus perintah dari pengirim yang di-allowlist ditangani segera (melewati antrean + model). -- **Mention gating grup:** pesan khusus perintah dari pengirim yang di-allowlist melewati persyaratan mention. -- **Pintasan inline (hanya pengirim yang di-allowlist):** beberapa perintah juga berfungsi saat disematkan dalam pesan normal dan dihapus sebelum model melihat teks yang tersisa. - - Contoh: `hey /status` memicu balasan status, dan teks yang tersisa melanjutkan alur normal. +- `/verbose` dimaksudkan untuk debugging dan visibilitas tambahan; biarkan **off** dalam penggunaan normal. +- `/fast on|off` menyimpan override sesi. Gunakan opsi `inherit` di UI Sessions untuk menghapusnya dan kembali ke default config. +- `/fast` bersifat spesifik provider: OpenAI/OpenAI Codex memetakannya ke `service_tier=priority` pada endpoint Responses native, sedangkan permintaan Anthropic publik langsung, termasuk trafik terautentikasi OAuth yang dikirim ke `api.anthropic.com`, memetakannya ke `service_tier=auto` atau `standard_only`. Lihat [OpenAI](/id/providers/openai) dan [Anthropic](/id/providers/anthropic). +- Ringkasan kegagalan tool tetap ditampilkan saat relevan, tetapi teks kegagalan terperinci hanya disertakan saat `/verbose` bernilai `on` atau `full`. +- `/reasoning` (dan `/verbose`) berisiko dalam pengaturan grup: keduanya dapat mengungkap reasoning internal atau keluaran tool yang tidak ingin Anda tampilkan. Sebaiknya biarkan nonaktif, terutama di chat grup. +- `/model` langsung menyimpan model sesi yang baru. +- Jika agen sedang idle, run berikutnya langsung menggunakannya. +- Jika sebuah run sudah aktif, OpenClaw menandai perpindahan langsung sebagai tertunda dan hanya me-restart ke model baru pada titik retry yang bersih. +- Jika aktivitas tool atau keluaran balasan sudah dimulai, perpindahan yang tertunda dapat tetap antre sampai peluang retry berikutnya atau giliran pengguna berikutnya. +- **Jalur cepat:** pesan yang hanya berisi perintah dari pengirim yang di-allowlist ditangani langsung (melewati antrean + model). +- **Penyaringan mention grup:** pesan yang hanya berisi perintah dari pengirim yang di-allowlist melewati persyaratan mention. +- **Shortcut inline (hanya pengirim yang di-allowlist):** perintah tertentu juga berfungsi saat disematkan dalam pesan normal dan dihapus sebelum model melihat sisa teks. + - Contoh: `hey /status` memicu balasan status, dan sisa teks melanjutkan melalui alur normal. - Saat ini: `/help`, `/commands`, `/status`, `/whoami` (`/id`). -- Pesan khusus perintah dari pengirim yang tidak diotorisasi diabaikan secara senyap, dan token inline `/...` diperlakukan sebagai teks biasa. -- **Perintah skill:** skill `user-invocable` diekspos sebagai slash command. Nama dibersihkan menjadi `a-z0-9_` (maks 32 karakter); bentrokan akan diberi sufiks numerik (misalnya `_2`). - - `/skill [input]` menjalankan skill berdasarkan nama (berguna saat batas native command mencegah perintah per skill). - - Secara default, perintah skill diteruskan ke model sebagai permintaan normal. +- Pesan yang hanya berisi perintah dari pengirim tidak sah diabaikan secara diam-diam, dan token `/...` inline diperlakukan sebagai teks biasa. +- **Skill command:** skill `user-invocable` diekspos sebagai slash command. Nama disanitasi menjadi `a-z0-9_` (maks 32 karakter); tabrakan mendapat sufiks numerik (misalnya, `_2`). + - `/skill [input]` menjalankan skill berdasarkan nama (berguna saat batas perintah native mencegah per-skill command). + - Secara default, skill command diteruskan ke model sebagai permintaan normal. - Skill secara opsional dapat mendeklarasikan `command-dispatch: tool` untuk merutekan perintah langsung ke tool (deterministik, tanpa model). - Contoh: `/prose` (plugin OpenProse) — lihat [OpenProse](/id/prose). -- **Argumen native command:** Discord menggunakan autocomplete untuk opsi dinamis (dan menu tombol saat Anda menghilangkan argumen wajib). Telegram dan Slack menampilkan menu tombol saat sebuah perintah mendukung pilihan dan Anda menghilangkan argumen. +- **Argumen perintah native:** Discord menggunakan autocomplete untuk opsi dinamis (dan menu tombol saat Anda menghilangkan argumen wajib). Telegram dan Slack menampilkan menu tombol saat perintah mendukung pilihan dan Anda menghilangkan argumen. ## `/tools` -`/tools` menjawab pertanyaan runtime, bukan pertanyaan config: **apa yang dapat digunakan agent ini saat ini dalam -percakapan ini**. +`/tools` menjawab pertanyaan runtime, bukan pertanyaan config: **apa yang dapat digunakan agen ini sekarang +dalam percakapan ini**. - Default `/tools` ringkas dan dioptimalkan untuk pemindaian cepat. - `/tools verbose` menambahkan deskripsi singkat. -- Permukaan native command yang mendukung argumen mengekspos sakelar mode yang sama seperti `compact|verbose`. -- Hasil dibatasi ke sesi, sehingga mengubah agent, channel, thread, otorisasi pengirim, atau model dapat - mengubah output. +- Surface perintah native yang mendukung argumen mengekspos sakelar mode yang sama seperti `compact|verbose`. +- Hasil bersifat cakupan sesi, jadi mengganti agen, kanal, thread, otorisasi pengirim, atau model dapat + mengubah keluarannya. - `/tools` mencakup tool yang benar-benar dapat dijangkau saat runtime, termasuk tool inti, tool plugin - yang terhubung, dan tool milik channel. + yang terhubung, dan tool milik kanal. -Untuk pengeditan profil dan override, gunakan panel Tools di Control UI atau permukaan config/katalog +Untuk mengedit profil dan override, gunakan panel Tools di UI kontrol atau surface config/katalog alih-alih memperlakukan `/tools` sebagai katalog statis. -## Permukaan penggunaan (apa yang tampil di mana) +## Surface penggunaan (apa yang muncul di mana) -- **Penggunaan/kuota provider** (contoh: “Claude 80% tersisa”) muncul di `/status` untuk provider model saat ini ketika pelacakan penggunaan diaktifkan. OpenClaw menormalkan jendela provider menjadi `% tersisa`; untuk MiniMax, field persentase remaining-only dibalik sebelum ditampilkan, dan respons `model_remains` mengutamakan entri chat-model ditambah label paket bertag model. -- **Baris token/cache** di `/status` dapat fallback ke entri penggunaan transkrip terbaru saat snapshot sesi live jarang. Nilai live bukan nol yang ada tetap diutamakan, dan fallback transkrip juga dapat memulihkan label model runtime aktif plus total yang lebih besar berorientasi prompt saat total tersimpan hilang atau lebih kecil. +- **Penggunaan/kuota provider** (contoh: “Claude 80% left”) muncul di `/status` untuk provider model saat ini ketika pelacakan penggunaan diaktifkan. OpenClaw menormalkan jendela provider ke `% left`; untuk MiniMax, field persentase sisa-saja dibalik sebelum ditampilkan, dan respons `model_remains` mengutamakan entri model chat plus label paket bertag model. +- **Baris token/cache** di `/status` dapat fallback ke entri penggunaan transkrip terbaru saat snapshot sesi live jarang. Nilai live nonnol yang ada tetap diutamakan, dan fallback transkrip juga dapat memulihkan label model runtime aktif plus total berorientasi prompt yang lebih besar saat total tersimpan hilang atau lebih kecil. - **Token/biaya per respons** dikendalikan oleh `/usage off|tokens|full` (ditambahkan ke balasan normal). -- `/model status` adalah tentang **model/auth/endpoint**, bukan penggunaan. +- `/model status` berkaitan dengan **model/auth/endpoint**, bukan penggunaan. ## Pemilihan model (`/model`) -`/model` diimplementasikan sebagai directive. +`/model` diimplementasikan sebagai direktif. Contoh: @@ -214,12 +252,12 @@ Catatan: - `/model` dan `/model list` menampilkan pemilih ringkas bernomor (keluarga model + provider yang tersedia). - Di Discord, `/model` dan `/models` membuka pemilih interaktif dengan dropdown provider dan model plus langkah Submit. -- `/model <#>` memilih dari pemilih tersebut (dan lebih memilih provider saat ini jika memungkinkan). -- `/model status` menampilkan tampilan detail, termasuk endpoint provider yang dikonfigurasi (`baseUrl`) dan mode API (`api`) bila tersedia. +- `/model <#>` memilih dari pemilih tersebut (dan sebisa mungkin mengutamakan provider saat ini). +- `/model status` menampilkan tampilan detail, termasuk endpoint provider yang dikonfigurasi (`baseUrl`) dan mode API (`api`) saat tersedia. ## Override debug -`/debug` memungkinkan Anda menetapkan override config **khusus runtime** (memori, bukan disk). Hanya pemilik. Nonaktif secara default; aktifkan dengan `commands.debug: true`. +`/debug` memungkinkan Anda menetapkan override config **hanya runtime** (memori, bukan disk). Hanya pemilik. Nonaktif secara default; aktifkan dengan `commands.debug: true`. Contoh: @@ -233,7 +271,7 @@ Contoh: Catatan: -- Override segera berlaku untuk pembacaan config baru, tetapi **tidak** menulis ke `openclaw.json`. +- Override langsung diterapkan ke pembacaan config baru, tetapi **tidak** menulis ke `openclaw.json`. - Gunakan `/debug reset` untuk menghapus semua override dan kembali ke config di disk. ## Pembaruan config @@ -252,7 +290,7 @@ Contoh: Catatan: -- Config divalidasi sebelum penulisan; perubahan yang tidak valid ditolak. +- Config divalidasi sebelum ditulis; perubahan yang tidak valid ditolak. - Pembaruan `/config` tetap bertahan setelah restart. ## Pembaruan MCP @@ -270,12 +308,12 @@ Contoh: Catatan: -- `/mcp` menyimpan config di config OpenClaw, bukan setelan proyek milik Pi. -- Adapter runtime memutuskan transport mana yang benar-benar dapat dieksekusi. +- `/mcp` menyimpan config di config OpenClaw, bukan pengaturan proyek milik Pi. +- Adaptor runtime menentukan transport mana yang benar-benar dapat dieksekusi. ## Pembaruan plugin -`/plugins` memungkinkan operator menginspeksi plugin yang ditemukan dan mengubah status enable di config. Alur read-only dapat menggunakan `/plugin` sebagai alias. Nonaktif secara default; aktifkan dengan `commands.plugins: true`. +`/plugins` memungkinkan operator memeriksa plugin yang ditemukan dan mengaktifkan/menonaktifkannya di config. Alur baca-saja dapat menggunakan `/plugin` sebagai alias. Nonaktif secara default; aktifkan dengan `commands.plugins: true`. Contoh: @@ -290,34 +328,34 @@ Contoh: Catatan: - `/plugins list` dan `/plugins show` menggunakan penemuan plugin nyata terhadap workspace saat ini plus config di disk. -- `/plugins enable|disable` hanya memperbarui config plugin; perintah ini tidak menginstal atau menghapus plugin. -- Setelah perubahan enable/disable, mulai ulang gateway untuk menerapkannya. +- `/plugins enable|disable` hanya memperbarui config plugin; tidak menginstal atau menghapus instalasi plugin. +- Setelah perubahan enable/disable, restart gateway untuk menerapkannya. -## Catatan permukaan +## Catatan surface -- **Perintah teks** berjalan di sesi chat normal (DM berbagi `main`, grup memiliki sesi sendiri). -- **Native command** menggunakan sesi terisolasi: +- **Perintah teks** berjalan dalam sesi chat normal (DM berbagi `main`, grup memiliki sesi sendiri). +- **Perintah native** menggunakan sesi terisolasi: - Discord: `agent::discord:slash:` - Slack: `agent::slack:slash:` (prefiks dapat dikonfigurasi melalui `channels.slack.slashCommand.sessionPrefix`) - Telegram: `telegram:slash:` (menargetkan sesi chat melalui `CommandTargetSessionKey`) -- **`/stop`** menargetkan sesi chat aktif sehingga dapat menghentikan run saat ini. -- **Slack:** `channels.slack.slashCommand` masih didukung untuk satu perintah gaya `/openclaw`. Jika Anda mengaktifkan `commands.native`, Anda harus membuat satu slash command Slack per perintah bawaan (nama sama seperti `/help`). Menu argumen perintah untuk Slack dikirim sebagai tombol Block Kit ephemeral. - - Pengecualian native Slack: daftarkan `/agentstatus` (bukan `/status`) karena Slack mencadangkan `/status`. Teks `/status` tetap berfungsi dalam pesan Slack. +- **`/stop`** menargetkan sesi chat aktif sehingga dapat membatalkan run saat ini. +- **Slack:** `channels.slack.slashCommand` masih didukung untuk satu perintah bergaya `/openclaw`. Jika Anda mengaktifkan `commands.native`, Anda harus membuat satu slash command Slack per perintah built-in (nama yang sama seperti `/help`). Menu argumen perintah untuk Slack dikirim sebagai tombol Block Kit ephemeral. + - Pengecualian native Slack: daftarkan `/agentstatus` (bukan `/status`) karena Slack mencadangkan `/status`. Teks `/status` tetap berfungsi di pesan Slack. ## Pertanyaan sampingan BTW `/btw` adalah **pertanyaan sampingan** singkat tentang sesi saat ini. -Tidak seperti chat normal: +Berbeda dari chat normal: -- perintah ini menggunakan sesi saat ini sebagai konteks latar, +- menggunakan sesi saat ini sebagai konteks latar belakang, - berjalan sebagai panggilan one-shot **tanpa tool** yang terpisah, - tidak mengubah konteks sesi di masa depan, - tidak ditulis ke riwayat transkrip, -- dikirim sebagai hasil sampingan live alih-alih sebagai pesan assistant normal. +- dikirim sebagai hasil sampingan live, bukan sebagai pesan asisten normal. -Ini membuat `/btw` berguna saat Anda menginginkan klarifikasi sementara sementara -tugas utama tetap berjalan. +Hal ini membuat `/btw` berguna ketika Anda menginginkan klarifikasi sementara saat tugas utama +tetap berjalan. Contoh: diff --git a/docs/id/tools/tts.md b/docs/id/tools/tts.md index 36a05096d..71426b782 100644 --- a/docs/id/tools/tts.md +++ b/docs/id/tools/tts.md @@ -1,55 +1,57 @@ --- read_when: - Mengaktifkan text-to-speech untuk balasan - - Mengonfigurasi provider atau batas TTS + - Mengonfigurasi penyedia atau batas TTS - Menggunakan perintah /tts -summary: Text-to-speech (TTS) untuk balasan outbound +summary: Text-to-speech (TTS) untuk balasan keluar title: Text-to-Speech x-i18n: - generated_at: "2026-04-05T14:10:05Z" + generated_at: "2026-04-08T06:01:52Z" model: gpt-5.4 provider: openai - source_hash: 8487c8acef7585bd4eb5e3b39e2a063ebc6b5f0103524abdcbadd3a7781ffc46 + source_hash: 6e0fbcaf61282733c134f682e05a71f94d2169c03a85131ce9ad233c71a1e533 source_path: tools/tts.md workflow: 15 --- # Text-to-speech (TTS) -OpenClaw dapat mengubah balasan outbound menjadi audio menggunakan ElevenLabs, Microsoft, MiniMax, atau OpenAI. +OpenClaw dapat mengubah balasan keluar menjadi audio menggunakan ElevenLabs, Microsoft, MiniMax, atau OpenAI. Ini berfungsi di mana pun OpenClaw dapat mengirim audio. ## Layanan yang didukung -- **ElevenLabs** (provider utama atau fallback) -- **Microsoft** (provider utama atau fallback; implementasi bundled saat ini menggunakan `node-edge-tts`) -- **MiniMax** (provider utama atau fallback; menggunakan API T2A v2) -- **OpenAI** (provider utama atau fallback; juga digunakan untuk ringkasan) +- **ElevenLabs** (penyedia utama atau fallback) +- **Microsoft** (penyedia utama atau fallback; implementasi bawaan saat ini menggunakan `node-edge-tts`) +- **MiniMax** (penyedia utama atau fallback; menggunakan API T2A v2) +- **OpenAI** (penyedia utama atau fallback; juga digunakan untuk ringkasan) ### Catatan speech Microsoft -Provider speech Microsoft bundled saat ini menggunakan layanan TTS neural online Microsoft Edge melalui library `node-edge-tts`. Ini adalah layanan terhosting (bukan lokal), menggunakan endpoint Microsoft, dan tidak memerlukan API key. +Penyedia speech Microsoft bawaan saat ini menggunakan layanan +TTS neural online Microsoft Edge melalui library `node-edge-tts`. Ini adalah layanan yang dihosting (bukan +lokal), menggunakan endpoint Microsoft, dan tidak memerlukan kunci API. `node-edge-tts` mengekspos opsi konfigurasi speech dan format output, tetapi -tidak semua opsi didukung oleh layanan. Input config dan directive legacy yang -menggunakan `edge` tetap berfungsi dan dinormalisasi menjadi `microsoft`. +tidak semua opsi didukung oleh layanan. Konfigurasi lama dan input directive +yang menggunakan `edge` masih berfungsi dan dinormalisasi menjadi `microsoft`. Karena jalur ini adalah layanan web publik tanpa SLA atau kuota yang dipublikasikan, -perlakukan sebagai best-effort. Jika Anda memerlukan batas dan dukungan yang terjamin, gunakan OpenAI +anggap ini sebagai upaya terbaik. Jika Anda membutuhkan batas dan dukungan yang terjamin, gunakan OpenAI atau ElevenLabs. -## Key opsional +## Kunci opsional -Jika Anda ingin OpenAI, ElevenLabs, atau MiniMax: +Jika Anda ingin menggunakan OpenAI, ElevenLabs, atau MiniMax: - `ELEVENLABS_API_KEY` (atau `XI_API_KEY`) - `MINIMAX_API_KEY` - `OPENAI_API_KEY` -Speech Microsoft **tidak** memerlukan API key. +Speech Microsoft **tidak** memerlukan kunci API. -Jika beberapa provider dikonfigurasi, provider yang dipilih digunakan terlebih dahulu dan yang lain menjadi opsi fallback. +Jika beberapa penyedia dikonfigurasi, penyedia yang dipilih digunakan terlebih dahulu dan yang lain menjadi opsi fallback. Auto-summary menggunakan `summaryModel` yang dikonfigurasi (atau `agents.defaults.model.primary`), -jadi provider tersebut juga harus diautentikasi jika Anda mengaktifkan ringkasan. +jadi penyedia tersebut juga harus diautentikasi jika Anda mengaktifkan ringkasan. ## Tautan layanan @@ -61,20 +63,20 @@ jadi provider tersebut juga harus diautentikasi jika Anda mengaktifkan ringkasan - [node-edge-tts](https://github.com/SchneeHertz/node-edge-tts) - [Format output Microsoft Speech](https://learn.microsoft.com/azure/ai-services/speech-service/rest-text-to-speech#audio-outputs) -## Apakah ini aktif secara default? +## Apakah ini diaktifkan secara default? -Tidak. Auto‑TTS **nonaktif** secara default. Aktifkan di config dengan -`messages.tts.auto` atau per sesi dengan `/tts always` (alias: `/tts on`). +Tidak. Auto‑TTS **nonaktif** secara default. Aktifkan di konfigurasi dengan +`messages.tts.auto` atau secara lokal dengan `/tts on`. -Ketika `messages.tts.provider` tidak disetel, OpenClaw memilih provider -speech pertama yang dikonfigurasi dalam urutan auto-select registry. +Ketika `messages.tts.provider` tidak disetel, OpenClaw memilih penyedia +speech pertama yang dikonfigurasi dalam urutan auto-select registri. -## Config +## Konfigurasi -Config TTS berada di bawah `messages.tts` di `openclaw.json`. -Skema lengkap ada di [Konfigurasi Gateway](/id/gateway/configuration). +Konfigurasi TTS berada di bawah `messages.tts` dalam `openclaw.json`. +Skema lengkap ada di [Konfigurasi gateway](/id/gateway/configuration). -### Config minimal (aktifkan + provider) +### Konfigurasi minimal (aktifkan + penyedia) ```json5 { @@ -87,7 +89,7 @@ Skema lengkap ada di [Konfigurasi Gateway](/id/gateway/configuration). } ``` -### OpenAI utama dengan fallback ElevenLabs +### OpenAI sebagai utama dengan fallback ElevenLabs ```json5 { @@ -128,7 +130,7 @@ Skema lengkap ada di [Konfigurasi Gateway](/id/gateway/configuration). } ``` -### Microsoft utama (tanpa API key) +### Microsoft sebagai utama (tanpa kunci API) ```json5 { @@ -151,7 +153,7 @@ Skema lengkap ada di [Konfigurasi Gateway](/id/gateway/configuration). } ``` -### MiniMax utama +### MiniMax sebagai utama ```json5 { @@ -191,7 +193,7 @@ Skema lengkap ada di [Konfigurasi Gateway](/id/gateway/configuration). } ``` -### Batas kustom + path preferensi +### Batas khusus + path preferensi ```json5 { @@ -240,58 +242,58 @@ Lalu jalankan: - `auto`: mode auto‑TTS (`off`, `always`, `inbound`, `tagged`). - `inbound` hanya mengirim audio setelah pesan suara masuk. - - `tagged` hanya mengirim audio saat balasan menyertakan tag `[[tts]]`. -- `enabled`: toggle legacy (doctor memigrasikan ini ke `auto`). + - `tagged` hanya mengirim audio ketika balasan menyertakan tag `[[tts]]`. +- `enabled`: toggle lama (doctor memigrasikan ini ke `auto`). - `mode`: `"final"` (default) atau `"all"` (termasuk balasan tool/block). -- `provider`: id provider speech seperti `"elevenlabs"`, `"microsoft"`, `"minimax"`, atau `"openai"` (fallback otomatis). -- Jika `provider` **tidak** disetel, OpenClaw menggunakan provider speech pertama yang dikonfigurasi dalam urutan auto-select registry. -- Legacy `provider: "edge"` tetap berfungsi dan dinormalisasi menjadi `microsoft`. +- `provider`: id penyedia speech seperti `"elevenlabs"`, `"microsoft"`, `"minimax"`, atau `"openai"` (fallback berjalan otomatis). +- Jika `provider` **tidak disetel**, OpenClaw menggunakan penyedia speech pertama yang dikonfigurasi dalam urutan auto-select registri. +- `provider: "edge"` lama masih berfungsi dan dinormalisasi menjadi `microsoft`. - `summaryModel`: model murah opsional untuk auto-summary; default ke `agents.defaults.model.primary`. - Menerima `provider/model` atau alias model yang dikonfigurasi. -- `modelOverrides`: memungkinkan model mengeluarkan directive TTS (aktif secara default). - - `allowProvider` default ke `false` (pergantian provider perlu opt-in). -- `providers.`: pengaturan milik provider yang diberi key menurut id provider speech. -- Blok provider langsung legacy (`messages.tts.openai`, `messages.tts.elevenlabs`, `messages.tts.microsoft`, `messages.tts.edge`) dimigrasikan otomatis ke `messages.tts.providers.` saat load. -- `maxTextLength`: batas keras untuk input TTS (karakter). `/tts audio` gagal jika melebihi. -- `timeoutMs`: batas waktu request (ms). -- `prefsPath`: override path JSON preferensi lokal (provider/limit/summary). +- `modelOverrides`: mengizinkan model mengeluarkan directive TTS (aktif secara default). + - `allowProvider` default ke `false` (peralihan penyedia bersifat opt-in). +- `providers.`: pengaturan milik penyedia yang dikunci dengan id penyedia speech. +- Blok penyedia langsung lama (`messages.tts.openai`, `messages.tts.elevenlabs`, `messages.tts.microsoft`, `messages.tts.edge`) dimigrasikan otomatis ke `messages.tts.providers.` saat dimuat. +- `maxTextLength`: batas keras untuk input TTS (karakter). `/tts audio` gagal jika terlampaui. +- `timeoutMs`: batas waktu permintaan (ms). +- `prefsPath`: menimpa path JSON preferensi lokal (penyedia/batas/ringkasan). - Nilai `apiKey` fallback ke env vars (`ELEVENLABS_API_KEY`/`XI_API_KEY`, `MINIMAX_API_KEY`, `OPENAI_API_KEY`). -- `providers.elevenlabs.baseUrl`: override base URL API ElevenLabs. -- `providers.openai.baseUrl`: override endpoint TTS OpenAI. +- `providers.elevenlabs.baseUrl`: timpa URL dasar API ElevenLabs. +- `providers.openai.baseUrl`: timpa endpoint TTS OpenAI. - Urutan resolusi: `messages.tts.providers.openai.baseUrl` -> `OPENAI_TTS_BASE_URL` -> `https://api.openai.com/v1` - - Nilai non-default diperlakukan sebagai endpoint TTS yang kompatibel dengan OpenAI, sehingga nama model dan voice kustom diterima. + - Nilai non-default diperlakukan sebagai endpoint TTS yang kompatibel dengan OpenAI, sehingga nama model dan suara kustom diterima. - `providers.elevenlabs.voiceSettings`: - `stability`, `similarityBoost`, `style`: `0..1` - `useSpeakerBoost`: `true|false` - `speed`: `0.5..2.0` (1.0 = normal) - `providers.elevenlabs.applyTextNormalization`: `auto|on|off` -- `providers.elevenlabs.languageCode`: ISO 639-1 2 huruf (mis. `en`, `de`) -- `providers.elevenlabs.seed`: integer `0..4294967295` (determinisme best-effort) -- `providers.minimax.baseUrl`: override base URL API MiniMax (default `https://api.minimax.io`, env: `MINIMAX_API_HOST`). +- `providers.elevenlabs.languageCode`: ISO 639-1 2 huruf (misalnya `en`, `de`) +- `providers.elevenlabs.seed`: bilangan bulat `0..4294967295` (determinisme upaya terbaik) +- `providers.minimax.baseUrl`: timpa URL dasar API MiniMax (default `https://api.minimax.io`, env: `MINIMAX_API_HOST`). - `providers.minimax.model`: model TTS (default `speech-2.8-hd`, env: `MINIMAX_TTS_MODEL`). -- `providers.minimax.voiceId`: pengenal voice (default `English_expressive_narrator`, env: `MINIMAX_TTS_VOICE_ID`). +- `providers.minimax.voiceId`: pengenal suara (default `English_expressive_narrator`, env: `MINIMAX_TTS_VOICE_ID`). - `providers.minimax.speed`: kecepatan pemutaran `0.5..2.0` (default 1.0). - `providers.minimax.vol`: volume `(0, 10]` (default 1.0; harus lebih besar dari 0). - `providers.minimax.pitch`: pergeseran pitch `-12..12` (default 0). -- `providers.microsoft.enabled`: izinkan penggunaan speech Microsoft (default `true`; tanpa API key). -- `providers.microsoft.voice`: nama voice neural Microsoft (mis. `en-US-MichelleNeural`). -- `providers.microsoft.lang`: kode bahasa (mis. `en-US`). -- `providers.microsoft.outputFormat`: format output Microsoft (mis. `audio-24khz-48kbitrate-mono-mp3`). - - Lihat format output Microsoft Speech untuk nilai yang valid; tidak semua format didukung oleh transport bundled berbasis Edge. -- `providers.microsoft.rate` / `providers.microsoft.pitch` / `providers.microsoft.volume`: string persen (mis. `+10%`, `-5%`). +- `providers.microsoft.enabled`: izinkan penggunaan speech Microsoft (default `true`; tanpa kunci API). +- `providers.microsoft.voice`: nama suara neural Microsoft (misalnya `en-US-MichelleNeural`). +- `providers.microsoft.lang`: kode bahasa (misalnya `en-US`). +- `providers.microsoft.outputFormat`: format output Microsoft (misalnya `audio-24khz-48kbitrate-mono-mp3`). + - Lihat format output Microsoft Speech untuk nilai yang valid; tidak semua format didukung oleh transport bawaan berbasis Edge. +- `providers.microsoft.rate` / `providers.microsoft.pitch` / `providers.microsoft.volume`: string persen (misalnya `+10%`, `-5%`). - `providers.microsoft.saveSubtitles`: tulis subtitle JSON di samping file audio. -- `providers.microsoft.proxy`: URL proxy untuk request speech Microsoft. -- `providers.microsoft.timeoutMs`: override batas waktu request (ms). -- `edge.*`: alias legacy untuk pengaturan Microsoft yang sama. +- `providers.microsoft.proxy`: URL proxy untuk permintaan speech Microsoft. +- `providers.microsoft.timeoutMs`: timpa batas waktu permintaan (ms). +- `edge.*`: alias lama untuk pengaturan Microsoft yang sama. ## Override berbasis model (aktif secara default) Secara default, model **dapat** mengeluarkan directive TTS untuk satu balasan. -Ketika `messages.tts.auto` adalah `tagged`, directive ini diperlukan untuk memicu audio. +Ketika `messages.tts.auto` adalah `tagged`, directive ini wajib untuk memicu audio. -Saat diaktifkan, model dapat mengeluarkan directive `[[tts:...]]` untuk mengoverride voice +Saat diaktifkan, model dapat mengeluarkan directive `[[tts:...]]` untuk menimpa suara untuk satu balasan, ditambah blok `[[tts:text]]...[[/tts:text]]` opsional untuk -memberikan tag ekspresif (tawa, isyarat bernyanyi, dll.) yang seharusnya hanya muncul di +memberikan tag ekspresif (tawa, petunjuk bernyanyi, dan sebagainya) yang seharusnya hanya muncul di audio. Directive `provider=...` diabaikan kecuali `modelOverrides.allowProvider: true`. @@ -299,20 +301,20 @@ Directive `provider=...` diabaikan kecuali `modelOverrides.allowProvider: true`. Contoh payload balasan: ``` -Here you go. +Ini dia. [[tts:voiceId=pMsXgVXv3BLzUgSXRplE model=eleven_v3 speed=1.1]] -[[tts:text]](laughs) Read the song once more.[[/tts:text]] +[[tts:text]](tertawa) Bacakan lagunya sekali lagi.[[/tts:text]] ``` -Key directive yang tersedia (saat diaktifkan): +Kunci directive yang tersedia (saat diaktifkan): -- `provider` (id provider speech terdaftar, misalnya `openai`, `elevenlabs`, `minimax`, atau `microsoft`; memerlukan `allowProvider: true`) -- `voice` (voice OpenAI) atau `voiceId` (ElevenLabs / MiniMax) +- `provider` (id penyedia speech terdaftar, misalnya `openai`, `elevenlabs`, `minimax`, atau `microsoft`; memerlukan `allowProvider: true`) +- `voice` (suara OpenAI) atau `voiceId` (ElevenLabs / MiniMax) - `model` (model TTS OpenAI, id model ElevenLabs, atau model MiniMax) - `stability`, `similarityBoost`, `style`, `speed`, `useSpeakerBoost` - `vol` / `volume` (volume MiniMax, 0-10) -- `pitch` (pitch MiniMax, -12 sampai 12) +- `pitch` (pitch MiniMax, -12 hingga 12) - `applyTextNormalization` (`auto|on|off`) - `languageCode` (ISO 639-1) - `seed` @@ -331,7 +333,7 @@ Nonaktifkan semua override model: } ``` -Allowlist opsional (aktifkan pergantian provider sambil mempertahankan knob lain tetap dapat dikonfigurasi): +Allowlist opsional (aktifkan peralihan penyedia sambil tetap menjaga knob lain dapat dikonfigurasi): ```json5 { @@ -349,8 +351,8 @@ Allowlist opsional (aktifkan pergantian provider sambil mempertahankan knob lain ## Preferensi per pengguna -Slash command menulis override lokal ke `prefsPath` (default: -`~/.openclaw/settings/tts.json`, override dengan `OPENCLAW_TTS_PREFS` atau +Perintah slash menulis override lokal ke `prefsPath` (default: +`~/.openclaw/settings/tts.json`, timpa dengan `OPENCLAW_TTS_PREFS` atau `messages.tts.prefsPath`). Field yang disimpan: @@ -360,65 +362,63 @@ Field yang disimpan: - `maxLength` (ambang ringkasan; default 1500 karakter) - `summarize` (default `true`) -Field-field ini mengoverride `messages.tts.*` untuk host tersebut. +Ini menimpa `messages.tts.*` untuk host tersebut. ## Format output (tetap) - **Feishu / Matrix / Telegram / WhatsApp**: pesan suara Opus (`opus_48000_64` dari ElevenLabs, `opus` dari OpenAI). - 48kHz / 64kbps adalah kompromi yang baik untuk pesan suara. -- **Channel lain**: MP3 (`mp3_44100_128` dari ElevenLabs, `mp3` dari OpenAI). - - 44.1kHz / 128kbps adalah keseimbangan default untuk kejernihan speech. -- **MiniMax**: MP3 (model `speech-2.8-hd`, sample rate 32kHz). Format voice-note tidak didukung secara native; gunakan OpenAI atau ElevenLabs untuk pesan suara Opus yang terjamin. +- **Kanal lain**: MP3 (`mp3_44100_128` dari ElevenLabs, `mp3` dari OpenAI). + - 44.1kHz / 128kbps adalah keseimbangan default untuk kejernihan ucapan. +- **MiniMax**: MP3 (model `speech-2.8-hd`, sample rate 32kHz). Format voice note tidak didukung secara native; gunakan OpenAI atau ElevenLabs untuk pesan suara Opus yang terjamin. - **Microsoft**: menggunakan `microsoft.outputFormat` (default `audio-24khz-48kbitrate-mono-mp3`). - - Transport bundled menerima `outputFormat`, tetapi tidak semua format tersedia dari layanan. + - Transport bawaan menerima `outputFormat`, tetapi tidak semua format tersedia dari layanan. - Nilai format output mengikuti format output Microsoft Speech (termasuk Ogg/WebM Opus). - - Telegram `sendVoice` menerima OGG/MP3/M4A; gunakan OpenAI/ElevenLabs jika Anda memerlukan + - Telegram `sendVoice` menerima OGG/MP3/M4A; gunakan OpenAI/ElevenLabs jika Anda membutuhkan pesan suara Opus yang terjamin. - - Jika format output Microsoft yang dikonfigurasi gagal, OpenClaw mencoba ulang dengan MP3. + - Jika format output Microsoft yang dikonfigurasi gagal, OpenClaw mencoba lagi dengan MP3. -Format output OpenAI/ElevenLabs tetap per channel (lihat di atas). +Format output OpenAI/ElevenLabs ditetapkan per kanal (lihat di atas). -## Perilaku auto-TTS +## Perilaku Auto-TTS Saat diaktifkan, OpenClaw: - melewati TTS jika balasan sudah berisi media atau directive `MEDIA:`. -- melewati balasan yang sangat singkat (< 10 karakter). +- melewati balasan yang sangat pendek (< 10 karakter). - meringkas balasan panjang saat diaktifkan menggunakan `agents.defaults.model.primary` (atau `summaryModel`). - melampirkan audio yang dihasilkan ke balasan. -Jika balasan melebihi `maxLength` dan ringkasan nonaktif (atau tidak ada API key untuk +Jika balasan melebihi `maxLength` dan ringkasan nonaktif (atau tidak ada kunci API untuk model ringkasan), audio dilewati dan balasan teks normal dikirim. ## Diagram alur ``` -Reply -> TTS enabled? - no -> kirim teks - yes -> ada media / MEDIA: / pendek? - yes -> kirim teks - no -> panjang > batas? - no -> TTS -> lampirkan audio - yes -> ringkasan aktif? - no -> kirim teks - yes -> ringkas (summaryModel atau agents.defaults.model.primary) - -> TTS -> lampirkan audio +Balasan -> TTS diaktifkan? + tidak -> kirim teks + ya -> ada media / MEDIA: / pendek? + ya -> kirim teks + tidak -> panjang > batas? + tidak -> TTS -> lampirkan audio + ya -> ringkasan diaktifkan? + tidak -> kirim teks + ya -> ringkas (summaryModel atau agents.defaults.model.primary) + -> TTS -> lampirkan audio ``` -## Penggunaan slash command +## Penggunaan perintah slash -Ada satu command: `/tts`. -Lihat [Slash commands](/tools/slash-commands) untuk detail pengaktifan. +Ada satu perintah: `/tts`. +Lihat [Perintah slash](/id/tools/slash-commands) untuk detail pengaktifannya. -Catatan Discord: `/tts` adalah command bawaan Discord, jadi OpenClaw mendaftarkan -`/voice` sebagai command native di sana. Teks `/tts ...` tetap berfungsi. +Catatan Discord: `/tts` adalah perintah bawaan Discord, jadi OpenClaw mendaftarkan +`/voice` sebagai perintah native di sana. Teks `/tts ...` tetap berfungsi. ``` /tts off -/tts always -/tts inbound -/tts tagged +/tts on /tts status /tts provider openai /tts limit 2000 @@ -428,26 +428,28 @@ Catatan Discord: `/tts` adalah command bawaan Discord, jadi OpenClaw mendaftarka Catatan: -- Command memerlukan pengirim yang berwenang (aturan allowlist/owner tetap berlaku). -- `commands.text` atau pendaftaran command native harus diaktifkan. -- `off|always|inbound|tagged` adalah toggle per sesi (`/tts on` adalah alias untuk `/tts always`). -- `limit` dan `summary` disimpan dalam preferensi lokal, bukan config utama. +- Perintah memerlukan pengirim yang diotorisasi (aturan allowlist/owner tetap berlaku). +- `commands.text` atau pendaftaran perintah native harus diaktifkan. +- Konfigurasi `messages.tts.auto` menerima `off|always|inbound|tagged`. +- `/tts on` menulis preferensi TTS lokal menjadi `always`; `/tts off` menulisnya menjadi `off`. +- Gunakan konfigurasi jika Anda ingin default `inbound` atau `tagged`. +- `limit` dan `summary` disimpan dalam preferensi lokal, bukan konfigurasi utama. - `/tts audio` menghasilkan balasan audio satu kali (tidak mengaktifkan TTS). - `/tts status` mencakup visibilitas fallback untuk percobaan terbaru: - - fallback berhasil: `Fallback: -> ` plus `Attempts: ...` - - gagal: `Error: ...` plus `Attempts: ...` + - fallback berhasil: `Fallback: -> ` ditambah `Attempts: ...` + - gagal: `Error: ...` ditambah `Attempts: ...` - diagnostik terperinci: `Attempt details: provider:outcome(reasonCode) latency` -- Kegagalan API OpenAI dan ElevenLabs sekarang menyertakan detail error provider yang sudah diparse dan request id (jika dikembalikan oleh provider), yang ditampilkan dalam error/log TTS. +- Kegagalan API OpenAI dan ElevenLabs kini mencakup detail error penyedia yang telah di-parse dan request id (saat dikembalikan oleh penyedia), yang ditampilkan dalam error/log TTS. ## Tool agen Tool `tts` mengubah teks menjadi speech dan mengembalikan lampiran audio untuk -pengiriman balasan. Ketika channel adalah Feishu, Matrix, Telegram, atau WhatsApp, -audio dikirim sebagai pesan suara, bukan lampiran file. +pengiriman balasan. Ketika kanalnya adalah Feishu, Matrix, Telegram, atau WhatsApp, +audio dikirim sebagai pesan suara, bukan sebagai lampiran file. ## Gateway RPC -Method Gateway: +Metode gateway: - `tts.status` - `tts.enable`