chore(i18n): refresh id translations
This commit is contained in:
parent
c3761ef29b
commit
db5d55df6b
@ -1,28 +1,28 @@
|
||||
---
|
||||
read_when:
|
||||
- Anda ingin menyajikan model dari mesin GPU Anda sendiri
|
||||
- Anda sedang menyiapkan LM Studio atau proxy yang kompatibel dengan OpenAI
|
||||
- Anda memerlukan panduan model lokal yang paling aman
|
||||
- Anda ingin menyajikan model dari box GPU Anda sendiri
|
||||
- Anda sedang menghubungkan LM Studio atau proxy yang kompatibel dengan OpenAI
|
||||
- Anda membutuhkan panduan model lokal yang paling aman
|
||||
summary: Jalankan OpenClaw pada LLM lokal (LM Studio, vLLM, LiteLLM, endpoint OpenAI kustom)
|
||||
title: Model Lokal
|
||||
x-i18n:
|
||||
generated_at: "2026-04-13T08:50:45Z"
|
||||
generated_at: "2026-04-14T09:14:20Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: 3ecb61b3e6e34d3666f9b688cd694d92c5fb211cf8c420fa876f7ccf5789154a
|
||||
source_hash: 1544c522357ba4b18dfa6d05ea8d60c7c6262281b53863d9aee7002464703ca7
|
||||
source_path: gateway/local-models.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
# Model lokal
|
||||
|
||||
Lokal bisa dilakukan, tetapi OpenClaw mengharapkan konteks besar + pertahanan yang kuat terhadap injeksi prompt. Kartu kecil memotong konteks dan membocorkan mekanisme keamanan. Targetkan tinggi: **≥2 Mac Studio dengan spesifikasi maksimum atau rig GPU setara (~$30k+)**. Satu GPU **24 GB** hanya cocok untuk prompt yang lebih ringan dengan latensi lebih tinggi. Gunakan **varian model terbesar / ukuran penuh yang bisa Anda jalankan**; checkpoint yang sangat dikuantisasi atau “small” meningkatkan risiko injeksi prompt (lihat [Security](/id/gateway/security)).
|
||||
Lokal memungkinkan, tetapi OpenClaw mengharapkan konteks besar + pertahanan kuat terhadap injeksi prompt. Kartu kecil memotong konteks dan melemahkan keamanan. Targetkan tinggi: **≥2 Mac Studio yang dimaksimalkan atau rig GPU setara (~$30k+)**. Satu GPU **24 GB** hanya cocok untuk prompt yang lebih ringan dengan latensi lebih tinggi. Gunakan **varian model terbesar / ukuran penuh yang bisa Anda jalankan**; checkpoint yang dikuantisasi secara agresif atau “kecil” meningkatkan risiko injeksi prompt (lihat [Keamanan](/id/gateway/security)).
|
||||
|
||||
Jika Anda menginginkan setup lokal dengan hambatan paling rendah, mulai dengan [LM Studio](/id/providers/lmstudio) atau [Ollama](/id/providers/ollama) dan `openclaw onboard`. Halaman ini adalah panduan yang opiniatif untuk stack lokal kelas atas dan server lokal kustom yang kompatibel dengan OpenAI.
|
||||
Jika Anda menginginkan penyiapan lokal dengan hambatan paling rendah, mulai dengan [LM Studio](/id/providers/lmstudio) atau [Ollama](/id/providers/ollama) dan `openclaw onboard`. Halaman ini adalah panduan beropini untuk stack lokal kelas lebih tinggi dan server lokal kustom yang kompatibel dengan OpenAI.
|
||||
|
||||
## Rekomendasi: LM Studio + model lokal besar (Responses API)
|
||||
## Direkomendasikan: LM Studio + model lokal besar (Responses API)
|
||||
|
||||
Stack lokal terbaik saat ini. Muat model besar di LM Studio (misalnya, build Qwen, DeepSeek, atau Llama ukuran penuh), aktifkan server lokal (default `http://127.0.0.1:1234`), dan gunakan Responses API untuk menjaga reasoning tetap terpisah dari teks akhir.
|
||||
Stack lokal terbaik saat ini. Muat model besar di LM Studio (misalnya, build Qwen, DeepSeek, atau Llama ukuran penuh), aktifkan server lokal (default `http://127.0.0.1:1234`), dan gunakan Responses API agar penalaran tetap terpisah dari teks final.
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -59,18 +59,18 @@ Stack lokal terbaik saat ini. Muat model besar di LM Studio (misalnya, build Qwe
|
||||
}
|
||||
```
|
||||
|
||||
**Daftar periksa setup**
|
||||
**Daftar periksa penyiapan**
|
||||
|
||||
- Instal LM Studio: [https://lmstudio.ai](https://lmstudio.ai)
|
||||
- Di LM Studio, unduh **build model terbesar yang tersedia** (hindari varian “small”/yang sangat dikuantisasi), mulai server, pastikan `http://127.0.0.1:1234/v1/models` menampilkannya.
|
||||
- Di LM Studio, unduh **build model terbesar yang tersedia** (hindari varian “kecil”/yang sangat dikuantisasi), mulai server, pastikan `http://127.0.0.1:1234/v1/models` menampilkannya.
|
||||
- Ganti `my-local-model` dengan ID model sebenarnya yang ditampilkan di LM Studio.
|
||||
- Biarkan model tetap dimuat; cold-load menambah latensi saat startup.
|
||||
- Biarkan model tetap dimuat; cold-load menambah latensi startup.
|
||||
- Sesuaikan `contextWindow`/`maxTokens` jika build LM Studio Anda berbeda.
|
||||
- Untuk WhatsApp, tetap gunakan Responses API agar hanya teks akhir yang dikirim.
|
||||
- Untuk WhatsApp, tetap gunakan Responses API agar hanya teks final yang dikirim.
|
||||
|
||||
Tetap konfigurasikan model yang di-host bahkan saat menjalankan lokal; gunakan `models.mode: "merge"` agar fallback tetap tersedia.
|
||||
|
||||
### Konfigurasi hybrid: hosted primary, fallback lokal
|
||||
### Konfigurasi hybrid: hosted sebagai utama, lokal sebagai fallback
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -111,14 +111,14 @@ Tetap konfigurasikan model yang di-host bahkan saat menjalankan lokal; gunakan `
|
||||
}
|
||||
```
|
||||
|
||||
### Mengutamakan lokal dengan jaring pengaman hosted
|
||||
### Lokal sebagai prioritas dengan jaring pengaman hosted
|
||||
|
||||
Tukar urutan primary dan fallback; pertahankan blok provider yang sama dan `models.mode: "merge"` agar Anda bisa fallback ke Sonnet atau Opus saat mesin lokal tidak tersedia.
|
||||
Tukar urutan primary dan fallback; pertahankan blok provider yang sama dan `models.mode: "merge"` agar Anda bisa fallback ke Sonnet atau Opus saat box lokal tidak aktif.
|
||||
|
||||
### Hosting regional / perutean data
|
||||
|
||||
- Varian MiniMax/Kimi/GLM yang di-host juga tersedia di OpenRouter dengan endpoint yang dikunci ke wilayah tertentu (misalnya, di-host di AS). Pilih varian regional di sana untuk menjaga lalu lintas tetap berada dalam yurisdiksi pilihan Anda sambil tetap menggunakan `models.mode: "merge"` untuk fallback Anthropic/OpenAI.
|
||||
- Hanya-lokal tetap menjadi jalur privasi terkuat; perutean regional yang di-host adalah jalan tengah saat Anda membutuhkan fitur provider tetapi ingin mengontrol aliran data.
|
||||
- Varian MiniMax/Kimi/GLM yang di-host juga tersedia di OpenRouter dengan endpoint yang dipatok ke wilayah tertentu (misalnya, di-host di AS). Pilih varian regional di sana agar trafik tetap berada dalam yurisdiksi pilihan Anda sambil tetap menggunakan `models.mode: "merge"` untuk fallback Anthropic/OpenAI.
|
||||
- Hanya lokal tetap menjadi jalur privasi terkuat; perutean regional yang di-host adalah titik tengah saat Anda membutuhkan fitur provider tetapi ingin mengendalikan aliran data.
|
||||
|
||||
## Proxy lokal lain yang kompatibel dengan OpenAI
|
||||
|
||||
@ -150,35 +150,42 @@ vLLM, LiteLLM, OAI-proxy, atau gateway kustom dapat digunakan jika mereka mengek
|
||||
}
|
||||
```
|
||||
|
||||
Pertahankan `models.mode: "merge"` agar model hosted tetap tersedia sebagai fallback.
|
||||
Tetap gunakan `models.mode: "merge"` agar model hosted tetap tersedia sebagai fallback.
|
||||
|
||||
Catatan perilaku untuk backend lokal/proksi `/v1`:
|
||||
Catatan perilaku untuk backend `/v1` lokal/proxy:
|
||||
|
||||
- OpenClaw memperlakukan ini sebagai rute gaya proksi yang kompatibel dengan OpenAI, bukan endpoint OpenAI native
|
||||
- OpenClaw memperlakukan ini sebagai rute bergaya proxy yang kompatibel dengan OpenAI, bukan endpoint OpenAI native
|
||||
- pembentukan permintaan khusus OpenAI native tidak berlaku di sini: tidak ada
|
||||
`service_tier`, tidak ada `store` pada Responses, tidak ada pembentukan payload kompatibilitas reasoning OpenAI, dan tidak ada petunjuk prompt-cache
|
||||
`service_tier`, tidak ada Responses `store`, tidak ada pembentukan payload kompatibilitas penalaran OpenAI,
|
||||
dan tidak ada petunjuk prompt-cache
|
||||
- header atribusi OpenClaw tersembunyi (`originator`, `version`, `User-Agent`)
|
||||
tidak disisipkan pada URL proksi kustom ini
|
||||
tidak disisipkan pada URL proxy kustom ini
|
||||
|
||||
Catatan kompatibilitas untuk backend yang kompatibel dengan OpenAI tetapi lebih ketat:
|
||||
Catatan kompatibilitas untuk backend kompatibel OpenAI yang lebih ketat:
|
||||
|
||||
- Beberapa server hanya menerima `messages[].content` berupa string pada Chat Completions, bukan array content-part terstruktur. Atur
|
||||
- Beberapa server hanya menerima `messages[].content` bertipe string pada Chat Completions, bukan
|
||||
array bagian-konten terstruktur. Atur
|
||||
`models.providers.<provider>.models[].compat.requiresStringContent: true` untuk
|
||||
endpoint tersebut.
|
||||
- Beberapa backend lokal yang lebih kecil atau lebih ketat tidak stabil dengan bentuk prompt runtime agen penuh milik OpenClaw, terutama saat schema tool disertakan. Jika backend
|
||||
bekerja untuk panggilan `/v1/chat/completions` langsung yang kecil tetapi gagal pada giliran agen OpenClaw normal, coba
|
||||
- Beberapa backend lokal yang lebih kecil atau lebih ketat tidak stabil dengan bentuk prompt runtime agen OpenClaw
|
||||
yang lengkap, terutama ketika skema tool disertakan. Jika
|
||||
backend berfungsi untuk panggilan `/v1/chat/completions` langsung yang kecil tetapi gagal pada giliran agen OpenClaw
|
||||
normal, coba
|
||||
`models.providers.<provider>.models[].compat.supportsTools: false` terlebih dahulu.
|
||||
- Jika backend masih gagal hanya pada eksekusi OpenClaw yang lebih besar, masalah yang tersisa biasanya adalah kapasitas model/server upstream atau bug backend, bukan lapisan transport OpenClaw.
|
||||
- Jika backend masih gagal hanya pada eksekusi OpenClaw yang lebih besar, masalah yang tersisa
|
||||
biasanya adalah kapasitas model/server upstream atau bug backend, bukan lapisan transport
|
||||
OpenClaw.
|
||||
|
||||
## Pemecahan masalah
|
||||
|
||||
- Gateway bisa menjangkau proksi? `curl http://127.0.0.1:1234/v1/models`.
|
||||
- Model LM Studio tidak dimuat? Muat ulang; cold start adalah penyebab umum “macet”.
|
||||
- Error konteks? Turunkan `contextWindow` atau naikkan batas server Anda.
|
||||
- Gateway bisa menjangkau proxy? `curl http://127.0.0.1:1234/v1/models`.
|
||||
- Model LM Studio tidak dimuat? Muat ulang; cold start adalah penyebab umum “menggantung”.
|
||||
- OpenClaw memperingatkan saat jendela konteks yang terdeteksi di bawah **32k** dan memblokir di bawah **16k**. Jika Anda mencapai preflight itu, tingkatkan batas konteks server/model atau pilih model yang lebih besar.
|
||||
- Kesalahan konteks? Turunkan `contextWindow` atau tingkatkan batas server Anda.
|
||||
- Server yang kompatibel dengan OpenAI mengembalikan `messages[].content ... expected a string`?
|
||||
Tambahkan `compat.requiresStringContent: true` pada entri model tersebut.
|
||||
- Panggilan `/v1/chat/completions` langsung yang kecil berhasil, tetapi `openclaw infer model run`
|
||||
gagal pada Gemma atau model lokal lain? Nonaktifkan schema tool terlebih dahulu dengan
|
||||
- Panggilan `/v1/chat/completions` langsung yang kecil berfungsi, tetapi `openclaw infer model run`
|
||||
gagal pada Gemma atau model lokal lain? Nonaktifkan skema tool terlebih dahulu dengan
|
||||
`compat.supportsTools: false`, lalu uji lagi. Jika server masih crash hanya
|
||||
pada prompt OpenClaw yang lebih besar, anggap itu sebagai keterbatasan server/model upstream.
|
||||
- Keamanan: model lokal melewati filter sisi provider; jaga agar agen tetap sempit dan Compaction tetap aktif untuk membatasi dampak injeksi prompt.
|
||||
pada prompt OpenClaw yang lebih besar, anggap itu sebagai keterbatasan model/server upstream.
|
||||
- Keamanan: model lokal melewati filter sisi provider; batasi agen tetap sempit dan biarkan compaction aktif untuk membatasi radius dampak injeksi prompt.
|
||||
|
||||
@ -1,14 +1,14 @@
|
||||
---
|
||||
read_when:
|
||||
- Mencari definisi kanal rilis publik
|
||||
- Mencari penamaan versi dan irama rilis
|
||||
summary: Kanal rilis publik, penamaan versi, dan irama rilis
|
||||
- Mencari definisi saluran rilis publik
|
||||
- Mencari penamaan versi dan ritme rilis
|
||||
summary: Saluran rilis publik, penamaan versi, dan ritme rilis
|
||||
title: Kebijakan Rilis
|
||||
x-i18n:
|
||||
generated_at: "2026-04-14T02:08:41Z"
|
||||
generated_at: "2026-04-14T09:14:19Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: fdc32839447205d74ba7a20a45fbac8e13b199174b442a1e260e3fce056c63da
|
||||
source_hash: 3eaf9f1786b8c9fd4f5a9c657b623cb69d1a485958e1a9b8f108511839b63587
|
||||
source_path: reference/RELEASING.md
|
||||
workflow: 15
|
||||
---
|
||||
@ -19,7 +19,7 @@ OpenClaw memiliki tiga jalur rilis publik:
|
||||
|
||||
- stable: rilis bertag yang dipublikasikan ke npm `beta` secara default, atau ke npm `latest` jika diminta secara eksplisit
|
||||
- beta: tag prarilis yang dipublikasikan ke npm `beta`
|
||||
- dev: head bergerak dari `main`
|
||||
- dev: head `main` yang terus bergerak
|
||||
|
||||
## Penamaan versi
|
||||
|
||||
@ -32,109 +32,153 @@ OpenClaw memiliki tiga jalur rilis publik:
|
||||
- Jangan tambahkan nol di depan bulan atau hari
|
||||
- `latest` berarti rilis npm stable yang saat ini dipromosikan
|
||||
- `beta` berarti target instalasi beta saat ini
|
||||
- Rilis stable dan rilis koreksi stable dipublikasikan ke npm `beta` secara default; operator rilis dapat menargetkan `latest` secara eksplisit, atau mempromosikan build beta yang telah divalidasi nanti
|
||||
- Rilis stable dan rilis koreksi stable dipublikasikan ke npm `beta` secara default; operator rilis dapat menargetkan `latest` secara eksplisit, atau mempromosikan build beta yang telah diverifikasi nanti
|
||||
- Setiap rilis OpenClaw mengirimkan paket npm dan aplikasi macOS secara bersamaan
|
||||
|
||||
## Irama rilis
|
||||
## Ritme rilis
|
||||
|
||||
- Rilis bergerak dengan pendekatan beta-first
|
||||
- Stable menyusul hanya setelah beta terbaru divalidasi
|
||||
- Prosedur rilis terperinci, persetujuan, kredensial, dan catatan pemulihan hanya untuk maintainer
|
||||
- Rilis bergerak dengan beta terlebih dahulu
|
||||
- Stable mengikuti hanya setelah beta terbaru tervalidasi
|
||||
- Prosedur rilis terperinci, persetujuan, kredensial, dan catatan pemulihan
|
||||
hanya untuk maintainer
|
||||
|
||||
## Pra-penerbangan rilis
|
||||
## Pemeriksaan awal rilis
|
||||
|
||||
- Jalankan `pnpm build && pnpm ui:build` sebelum `pnpm release:check` agar artefak rilis `dist/*` yang diharapkan dan bundle Control UI tersedia untuk langkah validasi pack
|
||||
- Jalankan `pnpm build && pnpm ui:build` sebelum `pnpm release:check` agar
|
||||
artefak rilis `dist/*` yang diharapkan dan bundle Control UI tersedia untuk langkah
|
||||
validasi pack
|
||||
- Jalankan `pnpm release:check` sebelum setiap rilis bertag
|
||||
- Pemeriksaan rilis sekarang berjalan dalam workflow manual terpisah:
|
||||
- Pemeriksaan rilis sekarang dijalankan dalam workflow manual terpisah:
|
||||
`OpenClaw Release Checks`
|
||||
- Pemisahan ini disengaja: menjaga jalur rilis npm yang sebenarnya tetap singkat, deterministik, dan berfokus pada artefak, sementara pemeriksaan live yang lebih lambat tetap berada di jalurnya sendiri agar tidak memperlambat atau memblokir publikasi
|
||||
- Pemeriksaan rilis harus dipicu dari workflow ref `main` agar logika workflow dan secrets tetap kanonis
|
||||
- Workflow tersebut menerima tag rilis yang sudah ada atau commit SHA `main` 40 karakter penuh saat ini
|
||||
- Dalam mode commit-SHA, workflow hanya menerima HEAD `origin/main` saat ini; gunakan tag rilis untuk commit rilis yang lebih lama
|
||||
- Pra-penerbangan hanya-validasi `OpenClaw NPM Release` juga menerima commit SHA `main` 40 karakter penuh saat ini tanpa memerlukan tag yang sudah di-push
|
||||
- Jalur SHA tersebut hanya untuk validasi dan tidak dapat dipromosikan menjadi publikasi nyata
|
||||
- Dalam mode SHA, workflow menyintesis `v<package.json version>` hanya untuk pemeriksaan metadata paket; publikasi nyata tetap memerlukan tag rilis yang nyata
|
||||
- Kedua workflow menjaga jalur publikasi dan promosi nyata tetap berada di runner yang di-host GitHub, sementara jalur validasi non-mutatif dapat menggunakan runner Blacksmith Linux yang lebih besar
|
||||
- Workflow tersebut menjalankan
|
||||
- Pemisahan ini disengaja: pertahankan jalur rilis npm yang sebenarnya tetap singkat,
|
||||
deterministik, dan berfokus pada artefak, sementara pemeriksaan live yang lebih lambat tetap berada di
|
||||
jalurnya sendiri agar tidak menunda atau memblokir publikasi
|
||||
- Pemeriksaan rilis harus dipicu dari workflow ref `main` agar
|
||||
logika workflow dan secret tetap kanonis
|
||||
- Workflow itu menerima tag rilis yang sudah ada atau commit SHA `main`
|
||||
penuh 40 karakter saat ini
|
||||
- Dalam mode commit-SHA, workflow itu hanya menerima HEAD `origin/main` saat ini; gunakan
|
||||
tag rilis untuk commit rilis yang lebih lama
|
||||
- Validasi awal khusus `OpenClaw NPM Release` juga menerima commit SHA `main`
|
||||
penuh 40 karakter saat ini tanpa memerlukan tag yang sudah dipush
|
||||
- Jalur SHA itu hanya untuk validasi dan tidak dapat dipromosikan menjadi publikasi nyata
|
||||
- Dalam mode SHA, workflow mensintesis `v<package.json version>` hanya untuk
|
||||
pemeriksaan metadata paket; publikasi nyata tetap memerlukan tag rilis yang nyata
|
||||
- Kedua workflow menjaga jalur publikasi dan promosi nyata tetap berjalan di runner yang dihosting GitHub,
|
||||
sementara jalur validasi non-mutasi dapat menggunakan runner Linux
|
||||
Blacksmith yang lebih besar
|
||||
- Workflow itu menjalankan
|
||||
`OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_CACHE_TEST=1 pnpm test:live:cache`
|
||||
menggunakan kedua workflow secrets `OPENAI_API_KEY` dan `ANTHROPIC_API_KEY`
|
||||
- Pra-penerbangan rilis npm tidak lagi menunggu jalur pemeriksaan rilis terpisah
|
||||
menggunakan secret workflow `OPENAI_API_KEY` dan `ANTHROPIC_API_KEY`
|
||||
- Validasi awal rilis npm tidak lagi menunggu jalur pemeriksaan rilis terpisah
|
||||
- Jalankan `RELEASE_TAG=vYYYY.M.D node --import tsx scripts/openclaw-npm-release-check.ts`
|
||||
(atau tag beta/koreksi yang sesuai) sebelum persetujuan
|
||||
- Setelah publikasi npm, jalankan
|
||||
- Setelah npm publish, jalankan
|
||||
`node --import tsx scripts/openclaw-npm-postpublish-verify.ts YYYY.M.D`
|
||||
(atau versi beta/koreksi yang sesuai) untuk memverifikasi jalur instalasi registry yang dipublikasikan dalam prefix temp yang baru
|
||||
(atau versi beta/koreksi yang sesuai) untuk memverifikasi jalur instalasi registry
|
||||
yang dipublikasikan dalam temp prefix baru
|
||||
- Otomatisasi rilis maintainer sekarang menggunakan preflight-then-promote:
|
||||
- publikasi npm nyata harus lulus `preflight_run_id` npm yang berhasil
|
||||
- rilis npm stable secara default menargetkan `beta`
|
||||
- publikasi npm nyata harus lulus dengan npm `preflight_run_id` yang berhasil
|
||||
- rilis npm stable secara default menuju `beta`
|
||||
- publikasi npm stable dapat menargetkan `latest` secara eksplisit melalui input workflow
|
||||
- promosi npm stable dari `beta` ke `latest` tetap tersedia sebagai mode manual eksplisit pada workflow tepercaya `OpenClaw NPM Release`
|
||||
- publikasi stable langsung juga dapat menjalankan mode sinkronisasi dist-tag eksplisit yang mengarahkan `latest` dan `beta` ke versi stable yang sudah dipublikasikan
|
||||
- mode dist-tag tersebut tetap memerlukan `NPM_TOKEN` yang valid di environment `npm-release` karena pengelolaan `npm dist-tag` terpisah dari trusted publishing
|
||||
- promosi npm stable dari `beta` ke `latest` masih tersedia sebagai mode manual eksplisit pada workflow tepercaya `OpenClaw NPM Release`
|
||||
- publikasi stable langsung juga dapat menjalankan mode sinkronisasi dist-tag eksplisit yang
|
||||
mengarahkan `latest` dan `beta` ke versi stable yang sudah dipublikasikan
|
||||
- mode dist-tag tersebut tetap memerlukan `NPM_TOKEN` yang valid di environment `npm-release` karena pengelolaan npm `dist-tag` terpisah dari trusted publishing
|
||||
- `macOS Release` publik hanya untuk validasi
|
||||
- publikasi mac privat yang nyata harus lulus `preflight_run_id` dan `validate_run_id` mac privat yang berhasil
|
||||
- jalur publikasi nyata mempromosikan artefak yang sudah disiapkan alih-alih membangunnya ulang lagi
|
||||
- Untuk rilis koreksi stable seperti `YYYY.M.D-N`, verifier pascapublikasi juga memeriksa jalur upgrade prefix temp yang sama dari `YYYY.M.D` ke `YYYY.M.D-N` agar koreksi rilis tidak secara diam-diam membuat instalasi global lama tetap berada pada payload stable dasar
|
||||
- Pra-penerbangan rilis npm gagal secara tertutup kecuali tarball mencakup `dist/control-ui/index.html` dan payload `dist/control-ui/assets/` yang tidak kosong agar kita tidak lagi mengirim dashboard browser yang kosong
|
||||
- Jika pekerjaan rilis menyentuh perencanaan CI, manifest timing ekstensi, atau matriks pengujian ekstensi, regenerasikan dan tinjau output matriks workflow `checks-node-extensions` yang dimiliki planner dari `.github/workflows/ci.yml` sebelum persetujuan agar catatan rilis tidak menggambarkan tata letak CI yang usang
|
||||
- Kesiapan rilis macOS stable juga mencakup surface updater:
|
||||
- rilis GitHub harus berakhir dengan `.zip`, `.dmg`, dan `.dSYM.zip` yang telah dipaketkan
|
||||
- `appcast.xml` di `main` harus menunjuk ke zip stable baru setelah publikasi
|
||||
- aplikasi yang telah dipaketkan harus mempertahankan bundle id non-debug, URL feed Sparkle yang tidak kosong, dan `CFBundleVersion` pada atau di atas batas build Sparkle kanonis untuk versi rilis tersebut
|
||||
- publikasi mac privat yang nyata harus lulus dengan `preflight_run_id` dan `validate_run_id`
|
||||
mac privat yang berhasil
|
||||
- jalur publikasi nyata mempromosikan artefak yang telah disiapkan alih-alih membangunnya
|
||||
lagi
|
||||
- Untuk rilis koreksi stable seperti `YYYY.M.D-N`, verifier pascapublikasi
|
||||
juga memeriksa jalur upgrade temp-prefix yang sama dari `YYYY.M.D` ke `YYYY.M.D-N`
|
||||
agar koreksi rilis tidak diam-diam meninggalkan instalasi global yang lebih lama pada
|
||||
payload stable dasar
|
||||
- Validasi awal rilis npm gagal secara tertutup kecuali tarball mencakup
|
||||
`dist/control-ui/index.html` dan payload `dist/control-ui/assets/` yang tidak kosong
|
||||
sehingga kita tidak mengirim dashboard browser kosong lagi
|
||||
- `pnpm test:install:smoke` juga menegakkan anggaran `unpackedSize` npm pack pada
|
||||
tarball pembaruan kandidat, sehingga installer e2e menangkap pembengkakan pack yang tidak disengaja
|
||||
sebelum jalur publikasi rilis
|
||||
- Jika pekerjaan rilis menyentuh perencanaan CI, manifest timing extension, atau
|
||||
matriks pengujian extension, regenerasikan dan tinjau keluaran matriks workflow
|
||||
`checks-node-extensions` milik planner dari `.github/workflows/ci.yml`
|
||||
sebelum persetujuan agar catatan rilis tidak menjelaskan tata letak CI yang usang
|
||||
- Kesiapan rilis macOS stable juga mencakup permukaan updater:
|
||||
- rilis GitHub harus berakhir dengan `.zip`, `.dmg`, dan `.dSYM.zip` yang sudah dipaketkan
|
||||
- `appcast.xml` di `main` harus mengarah ke zip stable baru setelah publish
|
||||
- aplikasi yang dipaketkan harus tetap memiliki bundle id non-debug, Sparkle feed
|
||||
URL yang tidak kosong, dan `CFBundleVersion` pada atau di atas batas build Sparkle kanonis
|
||||
untuk versi rilis tersebut
|
||||
|
||||
## Input workflow NPM
|
||||
|
||||
`OpenClaw NPM Release` menerima input yang dikendalikan operator berikut:
|
||||
|
||||
- `tag`: tag rilis yang wajib, seperti `v2026.4.2`, `v2026.4.2-1`, atau
|
||||
- `tag`: tag rilis yang wajib seperti `v2026.4.2`, `v2026.4.2-1`, atau
|
||||
`v2026.4.2-beta.1`; ketika `preflight_only=true`, ini juga dapat berupa
|
||||
commit SHA `main` 40 karakter penuh saat ini untuk pra-penerbangan hanya-validasi
|
||||
- `preflight_only`: `true` untuk validasi/build/package saja, `false` untuk jalur publikasi nyata
|
||||
- `preflight_run_id`: wajib pada jalur publikasi nyata agar workflow menggunakan kembali tarball yang telah disiapkan dari run pra-penerbangan yang berhasil
|
||||
- `npm_dist_tag`: tag target npm untuk jalur publikasi; default-nya `beta`
|
||||
- `promote_beta_to_latest`: `true` untuk melewati publikasi dan memindahkan build `beta` stable yang sudah dipublikasikan ke `latest`
|
||||
- `sync_stable_dist_tags`: `true` untuk melewati publikasi dan mengarahkan `latest` dan `beta` ke versi stable yang sudah dipublikasikan
|
||||
commit SHA `main` penuh 40 karakter saat ini untuk validasi awal khusus validasi
|
||||
- `preflight_only`: `true` untuk validasi/build/package saja, `false` untuk
|
||||
jalur publish nyata
|
||||
- `preflight_run_id`: wajib pada jalur publish nyata agar workflow menggunakan kembali
|
||||
tarball yang telah disiapkan dari run preflight yang berhasil
|
||||
- `npm_dist_tag`: tag target npm untuk jalur publish; default ke `beta`
|
||||
- `promote_beta_to_latest`: `true` untuk melewati publish dan memindahkan build `beta` stable
|
||||
yang sudah dipublikasikan ke `latest`
|
||||
- `sync_stable_dist_tags`: `true` untuk melewati publish dan mengarahkan `latest` dan
|
||||
`beta` ke versi stable yang sudah dipublikasikan
|
||||
|
||||
`OpenClaw Release Checks` menerima input yang dikendalikan operator berikut:
|
||||
|
||||
- `ref`: tag rilis yang sudah ada atau commit SHA `main` 40 karakter penuh saat ini yang akan divalidasi
|
||||
- `ref`: tag rilis yang sudah ada atau commit
|
||||
SHA `main` penuh 40 karakter saat ini untuk divalidasi
|
||||
|
||||
Aturan:
|
||||
|
||||
- Tag stable dan koreksi dapat dipublikasikan ke `beta` atau `latest`
|
||||
- Tag prarilis beta hanya dapat dipublikasikan ke `beta`
|
||||
- Input commit SHA penuh hanya diizinkan ketika `preflight_only=true`
|
||||
- Mode commit-SHA pemeriksaan rilis juga memerlukan HEAD `origin/main` saat ini
|
||||
- Jalur publikasi nyata harus menggunakan `npm_dist_tag` yang sama dengan yang digunakan selama pra-penerbangan; workflow memverifikasi metadata tersebut sebelum publikasi dilanjutkan
|
||||
- Input commit SHA penuh hanya diizinkan saat `preflight_only=true`
|
||||
- Mode commit-SHA pemeriksaan rilis juga mensyaratkan HEAD `origin/main` saat ini
|
||||
- Jalur publish nyata harus menggunakan `npm_dist_tag` yang sama dengan yang digunakan saat preflight;
|
||||
workflow memverifikasi metadata tersebut sebelum publish dilanjutkan
|
||||
- Mode promosi harus menggunakan tag stable atau koreksi, `preflight_only=false`,
|
||||
`preflight_run_id` kosong, dan `npm_dist_tag=beta`
|
||||
- Mode sinkronisasi dist-tag harus menggunakan tag stable atau koreksi,
|
||||
`preflight_only=false`, `preflight_run_id` kosong, `npm_dist_tag=latest`,
|
||||
dan `promote_beta_to_latest=false`
|
||||
- Mode promosi dan sinkronisasi dist-tag juga memerlukan `NPM_TOKEN` yang valid karena
|
||||
`npm dist-tag add` tetap memerlukan autentikasi npm biasa; trusted publishing hanya mencakup jalur publikasi paket
|
||||
`npm dist-tag add` tetap memerlukan autentikasi npm biasa; trusted publishing hanya mencakup
|
||||
jalur publish paket
|
||||
|
||||
## Urutan rilis npm stable
|
||||
|
||||
Saat membuat rilis npm stable:
|
||||
Saat memotong rilis npm stable:
|
||||
|
||||
1. Jalankan `OpenClaw NPM Release` dengan `preflight_only=true`
|
||||
- Sebelum tag ada, Anda dapat menggunakan commit SHA `main` penuh saat ini untuk dry run hanya-validasi dari workflow pra-penerbangan
|
||||
2. Pilih `npm_dist_tag=beta` untuk alur beta-first normal, atau `latest` hanya ketika Anda memang ingin melakukan publikasi stable langsung
|
||||
3. Jalankan `OpenClaw Release Checks` secara terpisah dengan tag yang sama atau commit SHA `main` penuh saat ini ketika Anda menginginkan cakupan cache prompt live
|
||||
- Ini dipisahkan dengan sengaja agar cakupan live tetap tersedia tanpa mengaitkan kembali pemeriksaan yang berjalan lama atau flaky ke workflow publikasi
|
||||
- Sebelum tag ada, Anda dapat menggunakan commit SHA `main` penuh saat ini untuk
|
||||
dry run hanya validasi dari workflow preflight
|
||||
2. Pilih `npm_dist_tag=beta` untuk alur beta-first normal, atau `latest` hanya
|
||||
ketika Anda memang ingin melakukan publish stable langsung
|
||||
3. Jalankan `OpenClaw Release Checks` secara terpisah dengan tag yang sama atau
|
||||
commit SHA `main` penuh saat ini ketika Anda ingin cakupan cache prompt live
|
||||
- Ini dipisahkan dengan sengaja agar cakupan live tetap tersedia tanpa
|
||||
menghubungkan kembali pemeriksaan yang berjalan lama atau tidak stabil ke workflow publish
|
||||
4. Simpan `preflight_run_id` yang berhasil
|
||||
5. Jalankan `OpenClaw NPM Release` lagi dengan `preflight_only=false`, `tag` yang sama, `npm_dist_tag` yang sama, dan `preflight_run_id` yang disimpan
|
||||
6. Jika rilis masuk ke `beta`, jalankan `OpenClaw NPM Release` nanti dengan `tag` stable yang sama, `promote_beta_to_latest=true`, `preflight_only=false`,
|
||||
`preflight_run_id` kosong, dan `npm_dist_tag=beta` ketika Anda ingin memindahkan build yang sudah dipublikasikan itu ke `latest`
|
||||
5. Jalankan `OpenClaw NPM Release` lagi dengan `preflight_only=false`, `tag`
|
||||
yang sama, `npm_dist_tag` yang sama, dan `preflight_run_id` yang disimpan
|
||||
6. Jika rilis mendarat di `beta`, jalankan `OpenClaw NPM Release` nanti dengan
|
||||
`tag` stable yang sama, `promote_beta_to_latest=true`, `preflight_only=false`,
|
||||
`preflight_run_id` kosong, dan `npm_dist_tag=beta` ketika Anda ingin memindahkan build
|
||||
yang telah dipublikasikan itu ke `latest`
|
||||
7. Jika rilis sengaja dipublikasikan langsung ke `latest` dan `beta`
|
||||
harus mengikuti build stable yang sama, jalankan `OpenClaw NPM Release` dengan `tag` stable yang sama, `sync_stable_dist_tags=true`, `promote_beta_to_latest=false`,
|
||||
harus mengikuti build stable yang sama, jalankan `OpenClaw NPM Release` dengan
|
||||
`tag` stable yang sama, `sync_stable_dist_tags=true`, `promote_beta_to_latest=false`,
|
||||
`preflight_only=false`, `preflight_run_id` kosong, dan `npm_dist_tag=latest`
|
||||
|
||||
Mode promosi dan sinkronisasi dist-tag tetap memerlukan persetujuan environment `npm-release`
|
||||
dan `NPM_TOKEN` yang valid yang dapat diakses oleh run workflow tersebut.
|
||||
dan `NPM_TOKEN` yang valid yang dapat diakses oleh workflow tersebut.
|
||||
|
||||
Hal ini menjaga agar jalur publikasi langsung dan jalur promosi beta-first tetap
|
||||
Ini menjaga jalur publish langsung dan jalur promosi beta-first tetap
|
||||
terdokumentasi dan terlihat oleh operator.
|
||||
|
||||
## Referensi publik
|
||||
@ -145,6 +189,6 @@ terdokumentasi dan terlihat oleh operator.
|
||||
- [`scripts/package-mac-dist.sh`](https://github.com/openclaw/openclaw/blob/main/scripts/package-mac-dist.sh)
|
||||
- [`scripts/make_appcast.sh`](https://github.com/openclaw/openclaw/blob/main/scripts/make_appcast.sh)
|
||||
|
||||
Maintainer menggunakan dokumen rilis privat di
|
||||
Maintainer menggunakan dokumentasi rilis privat di
|
||||
[`openclaw/maintainers/release/README.md`](https://github.com/openclaw/maintainers/blob/main/release/README.md)
|
||||
untuk runbook yang sebenarnya.
|
||||
|
||||
@ -1,41 +1,41 @@
|
||||
---
|
||||
read_when:
|
||||
- Menambahkan otomasi browser yang dikendalikan agen
|
||||
- Menambahkan otomatisasi browser yang dikendalikan agen
|
||||
- Men-debug mengapa openclaw mengganggu Chrome Anda sendiri
|
||||
- Menerapkan pengaturan browser + siklus hidup di aplikasi macOS
|
||||
summary: Layanan kontrol browser terintegrasi + perintah tindakan
|
||||
summary: Layanan kontrol browser terintegrasi + perintah aksi
|
||||
title: Browser (dikelola OpenClaw)
|
||||
x-i18n:
|
||||
generated_at: "2026-04-11T02:47:57Z"
|
||||
generated_at: "2026-04-14T09:14:20Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: da6fed36a6f40a50e825f90e5616778954545bd7e52397f7e088b85251ee024f
|
||||
source_hash: ae9ef725f544d4236d229f498c7187871c69bd18d31069b30a7e67fac53166a2
|
||||
source_path: tools/browser.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
# Browser (dikelola openclaw)
|
||||
|
||||
OpenClaw dapat menjalankan **profil Chrome/Brave/Edge/Chromium khusus** yang dikendalikan agen.
|
||||
Profil ini terisolasi dari browser pribadi Anda dan dikelola melalui layanan kontrol
|
||||
lokal kecil di dalam Gateway (hanya loopback).
|
||||
OpenClaw dapat menjalankan **profil Chrome/Brave/Edge/Chromium khusus** yang dikendalikan oleh agen.
|
||||
Ini terisolasi dari browser pribadi Anda dan dikelola melalui layanan kontrol lokal kecil
|
||||
di dalam Gateway (hanya loopback).
|
||||
|
||||
Tampilan untuk pemula:
|
||||
|
||||
- Anggap ini sebagai **browser terpisah khusus agen**.
|
||||
- Anggap ini sebagai **browser terpisah, khusus agen**.
|
||||
- Profil `openclaw` **tidak** menyentuh profil browser pribadi Anda.
|
||||
- Agen dapat **membuka tab, membaca halaman, mengeklik, dan mengetik** di jalur yang aman.
|
||||
- Profil bawaan `user` menempel ke sesi Chrome asli Anda yang sudah login melalui Chrome MCP.
|
||||
- Profil bawaan `user` terhubung ke sesi Chrome nyata Anda yang sudah login melalui Chrome MCP.
|
||||
|
||||
## Yang Anda dapatkan
|
||||
|
||||
- Profil browser terpisah bernama **openclaw** (aksen oranye secara default).
|
||||
- Kontrol tab deterministik (daftar/buka/fokus/tutup).
|
||||
- Tindakan agen (klik/ketik/seret/pilih), snapshot, screenshot, PDF.
|
||||
- Kontrol tab yang deterministik (daftar/buka/fokus/tutup).
|
||||
- Aksi agen (klik/ketik/seret/pilih), snapshot, screenshot, PDF.
|
||||
- Dukungan multi-profil opsional (`openclaw`, `work`, `remote`, ...).
|
||||
|
||||
Browser ini **bukan** browser harian Anda. Ini adalah permukaan yang aman dan terisolasi untuk
|
||||
otomasi dan verifikasi agen.
|
||||
otomatisasi dan verifikasi agen.
|
||||
|
||||
## Mulai cepat
|
||||
|
||||
@ -46,17 +46,17 @@ openclaw browser --browser-profile openclaw open https://example.com
|
||||
openclaw browser --browser-profile openclaw snapshot
|
||||
```
|
||||
|
||||
Jika Anda mendapatkan “Browser dinonaktifkan”, aktifkan di konfigurasi (lihat di bawah) dan restart
|
||||
Jika Anda mendapatkan “Browser dinonaktifkan”, aktifkan di konfigurasi (lihat di bawah) dan mulai ulang
|
||||
Gateway.
|
||||
|
||||
Jika `openclaw browser` hilang sepenuhnya, atau agen mengatakan tool browser
|
||||
tidak tersedia, langsung ke [Perintah atau tool browser hilang](/id/tools/browser#missing-browser-command-or-tool).
|
||||
Jika `openclaw browser` sama sekali tidak ada, atau agen mengatakan alat browser
|
||||
tidak tersedia, langsung ke [Perintah atau alat browser tidak ada](/id/tools/browser#missing-browser-command-or-tool).
|
||||
|
||||
## Kontrol plugin
|
||||
## Kontrol Plugin
|
||||
|
||||
Tool `browser` default sekarang merupakan plugin bawaan yang dikirim dalam keadaan aktif
|
||||
secara default. Artinya Anda dapat menonaktifkan atau menggantinya tanpa menghapus
|
||||
sisa sistem plugin OpenClaw:
|
||||
Alat `browser` default sekarang adalah Plugin bawaan yang dikirim dalam keadaan aktif
|
||||
secara default. Artinya Anda dapat menonaktifkan atau menggantinya tanpa menghapus sisa
|
||||
sistem plugin OpenClaw:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -70,30 +70,31 @@ sisa sistem plugin OpenClaw:
|
||||
}
|
||||
```
|
||||
|
||||
Nonaktifkan plugin bawaan sebelum memasang plugin lain yang menyediakan nama
|
||||
tool `browser` yang sama. Pengalaman browser default memerlukan keduanya:
|
||||
Nonaktifkan Plugin bawaan sebelum memasang Plugin lain yang menyediakan
|
||||
nama alat `browser` yang sama. Pengalaman browser default memerlukan keduanya:
|
||||
|
||||
- `plugins.entries.browser.enabled` tidak dinonaktifkan
|
||||
- `browser.enabled=true`
|
||||
|
||||
Jika Anda hanya mematikan plugin, CLI browser bawaan (`openclaw browser`),
|
||||
metode gateway (`browser.request`), tool agen, dan layanan kontrol browser default
|
||||
semuanya hilang bersama-sama. Konfigurasi `browser.*` Anda tetap utuh agar dapat digunakan ulang
|
||||
oleh plugin pengganti.
|
||||
Jika Anda hanya mematikan Plugin, CLI browser bawaan (`openclaw browser`),
|
||||
metode gateway (`browser.request`), alat agen, dan layanan kontrol browser default
|
||||
semuanya hilang bersama. Konfigurasi `browser.*` Anda tetap utuh agar dapat digunakan ulang oleh
|
||||
Plugin pengganti.
|
||||
|
||||
Plugin browser bawaan juga sekarang memiliki implementasi runtime browser.
|
||||
Inti hanya menyimpan helper Plugin SDK bersama ditambah ekspor ulang kompatibilitas untuk
|
||||
path impor internal lama. Dalam praktiknya, menghapus atau mengganti paket plugin browser
|
||||
menghapus kumpulan fitur browser alih-alih meninggalkan runtime kedua milik inti.
|
||||
Plugin browser bawaan kini juga memiliki implementasi runtime browser.
|
||||
Core hanya menyimpan helper Plugin SDK bersama serta re-export kompatibilitas untuk
|
||||
jalur import internal lama. Dalam praktiknya, menghapus atau mengganti paket Plugin browser
|
||||
akan menghapus rangkaian fitur browser alih-alih meninggalkan runtime kedua yang masih dimiliki
|
||||
core.
|
||||
|
||||
Perubahan konfigurasi browser tetap memerlukan restart Gateway agar plugin bawaan
|
||||
Perubahan konfigurasi browser tetap memerlukan restart Gateway agar Plugin bawaan
|
||||
dapat mendaftarkan ulang layanan browser-nya dengan pengaturan baru.
|
||||
|
||||
## Perintah atau tool browser hilang
|
||||
## Perintah atau alat browser tidak ada
|
||||
|
||||
Jika `openclaw browser` tiba-tiba menjadi perintah yang tidak dikenal setelah upgrade, atau
|
||||
agen melaporkan bahwa tool browser hilang, penyebab paling umum adalah daftar
|
||||
`plugins.allow` yang ketat dan tidak menyertakan `browser`.
|
||||
agen melaporkan bahwa alat browser hilang, penyebab paling umum adalah daftar
|
||||
`plugins.allow` yang terlalu ketat dan tidak menyertakan `browser`.
|
||||
|
||||
Contoh konfigurasi yang rusak:
|
||||
|
||||
@ -105,7 +106,7 @@ Contoh konfigurasi yang rusak:
|
||||
}
|
||||
```
|
||||
|
||||
Perbaiki dengan menambahkan `browser` ke allowlist plugin:
|
||||
Perbaiki dengan menambahkan `browser` ke allowlist Plugin:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -118,29 +119,29 @@ Perbaiki dengan menambahkan `browser` ke allowlist plugin:
|
||||
Catatan penting:
|
||||
|
||||
- `browser.enabled=true` saja tidak cukup ketika `plugins.allow` disetel.
|
||||
- `plugins.entries.browser.enabled=true` juga tidak cukup ketika `plugins.allow` disetel.
|
||||
- `tools.alsoAllow: ["browser"]` **tidak** memuat plugin browser bawaan. Itu hanya menyesuaikan kebijakan tool setelah plugin dimuat.
|
||||
- Jika Anda tidak memerlukan allowlist plugin yang ketat, menghapus `plugins.allow` juga mengembalikan perilaku browser bawaan default.
|
||||
- `plugins.entries.browser.enabled=true` saja juga tidak cukup ketika `plugins.allow` disetel.
|
||||
- `tools.alsoAllow: ["browser"]` **tidak** memuat Plugin browser bawaan. Itu hanya menyesuaikan kebijakan alat setelah Plugin sudah dimuat.
|
||||
- Jika Anda tidak membutuhkan allowlist Plugin yang ketat, menghapus `plugins.allow` juga mengembalikan perilaku browser bawaan default.
|
||||
|
||||
Gejala umum:
|
||||
|
||||
- `openclaw browser` adalah perintah yang tidak dikenal.
|
||||
- `browser.request` hilang.
|
||||
- Agen melaporkan tool browser tidak tersedia atau hilang.
|
||||
- `browser.request` tidak ada.
|
||||
- Agen melaporkan alat browser tidak tersedia atau hilang.
|
||||
|
||||
## Profil: `openclaw` vs `user`
|
||||
|
||||
- `openclaw`: browser terkelola dan terisolasi (tanpa extension yang diperlukan).
|
||||
- `openclaw`: browser terkelola dan terisolasi (tidak memerlukan ekstensi).
|
||||
- `user`: profil attach Chrome MCP bawaan untuk sesi **Chrome asli Anda yang sudah login**.
|
||||
|
||||
Untuk pemanggilan tool browser oleh agen:
|
||||
Untuk pemanggilan alat browser agen:
|
||||
|
||||
- Default: gunakan browser `openclaw` yang terisolasi.
|
||||
- Pilih `profile="user"` ketika sesi yang sudah login penting dan pengguna
|
||||
sedang berada di komputer untuk mengeklik/menyetujui prompt attach apa pun.
|
||||
- `profile` adalah override eksplisit ketika Anda menginginkan mode browser tertentu.
|
||||
- Gunakan `profile="user"` jika sesi login yang sudah ada penting dan pengguna
|
||||
sedang berada di depan komputer untuk mengeklik/menyetujui prompt attach apa pun.
|
||||
- `profile` adalah override eksplisit saat Anda menginginkan mode browser tertentu.
|
||||
|
||||
Set `browser.defaultProfile: "openclaw"` jika Anda ingin mode terkelola menjadi default.
|
||||
Setel `browser.defaultProfile: "openclaw"` jika Anda ingin mode terkelola secara default.
|
||||
|
||||
## Konfigurasi
|
||||
|
||||
@ -151,14 +152,14 @@ Pengaturan browser berada di `~/.openclaw/openclaw.json`.
|
||||
browser: {
|
||||
enabled: true, // default: true
|
||||
ssrfPolicy: {
|
||||
// dangerouslyAllowPrivateNetwork: true, // aktifkan hanya untuk akses jaringan privat tepercaya
|
||||
// dangerouslyAllowPrivateNetwork: true, // ikut serta hanya untuk akses jaringan privat tepercaya
|
||||
// allowPrivateNetwork: true, // alias lama
|
||||
// hostnameAllowlist: ["*.example.com", "example.com"],
|
||||
// allowedHostnames: ["localhost"],
|
||||
},
|
||||
// cdpUrl: "http://127.0.0.1:18792", // override satu profil lama
|
||||
remoteCdpTimeoutMs: 1500, // timeout HTTP CDP jarak jauh (md)
|
||||
remoteCdpHandshakeTimeoutMs: 3000, // timeout handshake WebSocket CDP jarak jauh (md)
|
||||
// cdpUrl: "http://127.0.0.1:18792", // override profil tunggal lama
|
||||
remoteCdpTimeoutMs: 1500, // timeout HTTP CDP jarak jauh (ms)
|
||||
remoteCdpHandshakeTimeoutMs: 3000, // timeout handshake WebSocket CDP jarak jauh (ms)
|
||||
defaultProfile: "openclaw",
|
||||
color: "#FF4500",
|
||||
headless: false,
|
||||
@ -189,29 +190,29 @@ Catatan:
|
||||
|
||||
- Layanan kontrol browser melakukan bind ke loopback pada port yang diturunkan dari `gateway.port`
|
||||
(default: `18791`, yaitu gateway + 2).
|
||||
- Jika Anda menimpa port Gateway (`gateway.port` atau `OPENCLAW_GATEWAY_PORT`),
|
||||
- Jika Anda meng-override port Gateway (`gateway.port` atau `OPENCLAW_GATEWAY_PORT`),
|
||||
port browser turunan akan bergeser agar tetap berada dalam “keluarga” yang sama.
|
||||
- `cdpUrl` default ke port CDP lokal terkelola saat tidak disetel.
|
||||
- `cdpUrl` secara default mengarah ke port CDP lokal terkelola saat tidak disetel.
|
||||
- `remoteCdpTimeoutMs` berlaku untuk pemeriksaan keterjangkauan CDP jarak jauh (non-loopback).
|
||||
- `remoteCdpHandshakeTimeoutMs` berlaku untuk pemeriksaan keterjangkauan WebSocket CDP jarak jauh.
|
||||
- Navigasi browser/buka-tab dilindungi SSRF sebelum navigasi dan diperiksa ulang sebisa mungkin pada URL `http(s)` akhir setelah navigasi.
|
||||
- Dalam mode SSRF ketat, penemuan/probe endpoint CDP jarak jauh (`cdpUrl`, termasuk lookup `/json/version`) juga diperiksa.
|
||||
- `browser.ssrfPolicy.dangerouslyAllowPrivateNetwork` dinonaktifkan secara default. Setel ke `true` hanya ketika Anda sengaja mempercayai akses browser jaringan privat.
|
||||
- `remoteCdpHandshakeTimeoutMs` berlaku untuk pemeriksaan keterjangkauan handshake WebSocket CDP jarak jauh.
|
||||
- Navigasi browser/buka-tab dilindungi SSRF sebelum navigasi dan diperiksa ulang sebisa mungkin pada URL akhir `http(s)` setelah navigasi.
|
||||
- Dalam mode SSRF ketat, discovery/probe endpoint CDP jarak jauh (`cdpUrl`, termasuk lookup `/json/version`) juga diperiksa.
|
||||
- `browser.ssrfPolicy.dangerouslyAllowPrivateNetwork` dinonaktifkan secara default. Setel ke `true` hanya jika Anda memang memercayai akses browser ke jaringan privat.
|
||||
- `browser.ssrfPolicy.allowPrivateNetwork` tetap didukung sebagai alias lama untuk kompatibilitas.
|
||||
- `attachOnly: true` berarti “jangan pernah meluncurkan browser lokal; hanya attach jika browser sudah berjalan.”
|
||||
- `color` + `color` per profil memberi tint pada UI browser sehingga Anda dapat melihat profil mana yang aktif.
|
||||
- `color` + `color` per profil memberi warna UI browser agar Anda dapat melihat profil mana yang aktif.
|
||||
- Profil default adalah `openclaw` (browser mandiri yang dikelola OpenClaw). Gunakan `defaultProfile: "user"` untuk memilih browser pengguna yang sudah login.
|
||||
- Urutan deteksi otomatis: browser default sistem jika berbasis Chromium; jika tidak, Chrome → Brave → Edge → Chromium → Chrome Canary.
|
||||
- Profil `openclaw` lokal menetapkan `cdpPort`/`cdpUrl` secara otomatis — setel itu hanya untuk CDP jarak jauh.
|
||||
- `driver: "existing-session"` menggunakan Chrome DevTools MCP alih-alih CDP mentah. Jangan
|
||||
- Profil `openclaw` lokal otomatis menetapkan `cdpPort`/`cdpUrl` — setel itu hanya untuk CDP jarak jauh.
|
||||
- `driver: "existing-session"` menggunakan Chrome DevTools MCP, bukan CDP mentah. Jangan
|
||||
setel `cdpUrl` untuk driver tersebut.
|
||||
- Setel `browser.profiles.<name>.userDataDir` ketika profil existing-session
|
||||
harus menempel ke profil pengguna Chromium non-default seperti Brave atau Edge.
|
||||
- Setel `browser.profiles.<name>.userDataDir` saat profil existing-session
|
||||
harus attach ke profil pengguna Chromium non-default seperti Brave atau Edge.
|
||||
|
||||
## Gunakan Brave (atau browser berbasis Chromium lainnya)
|
||||
|
||||
Jika browser **default sistem** Anda berbasis Chromium (Chrome/Brave/Edge/dll),
|
||||
OpenClaw akan menggunakannya secara otomatis. Setel `browser.executablePath` untuk menimpa
|
||||
OpenClaw akan menggunakannya secara otomatis. Setel `browser.executablePath` untuk meng-override
|
||||
deteksi otomatis:
|
||||
|
||||
Contoh CLI:
|
||||
@ -246,48 +247,48 @@ openclaw config set browser.executablePath "/usr/bin/google-chrome"
|
||||
## Kontrol lokal vs jarak jauh
|
||||
|
||||
- **Kontrol lokal (default):** Gateway memulai layanan kontrol loopback dan dapat meluncurkan browser lokal.
|
||||
- **Kontrol jarak jauh (host node):** jalankan host node di mesin yang memiliki browser; Gateway mem-proxy tindakan browser ke sana.
|
||||
- **Kontrol jarak jauh (host node):** jalankan host node di mesin yang memiliki browser; Gateway mem-proxy aksi browser ke sana.
|
||||
- **CDP jarak jauh:** setel `browser.profiles.<name>.cdpUrl` (atau `browser.cdpUrl`) untuk
|
||||
attach ke browser berbasis Chromium jarak jauh. Dalam kasus ini, OpenClaw tidak akan meluncurkan browser lokal.
|
||||
|
||||
Perilaku penghentian berbeda menurut mode profil:
|
||||
|
||||
- profil terkelola lokal: `openclaw browser stop` menghentikan proses browser yang
|
||||
diluncurkan OpenClaw
|
||||
- profil lokal terkelola: `openclaw browser stop` menghentikan proses browser yang
|
||||
diluncurkan oleh OpenClaw
|
||||
- profil attach-only dan CDP jarak jauh: `openclaw browser stop` menutup sesi
|
||||
kontrol aktif dan melepaskan override emulasi Playwright/CDP (viewport,
|
||||
skema warna, locale, zona waktu, mode offline, dan status serupa), meskipun
|
||||
skema warna, lokal, zona waktu, mode offline, dan status serupa), meskipun
|
||||
tidak ada proses browser yang diluncurkan oleh OpenClaw
|
||||
|
||||
URL CDP jarak jauh dapat menyertakan auth:
|
||||
URL CDP jarak jauh dapat menyertakan autentikasi:
|
||||
|
||||
- Token kueri (misalnya `https://provider.example?token=<token>`)
|
||||
- Auth Dasar HTTP (misalnya `https://user:pass@provider.example`)
|
||||
- Token query (mis. `https://provider.example?token=<token>`)
|
||||
- HTTP Basic auth (mis. `https://user:pass@provider.example`)
|
||||
|
||||
OpenClaw mempertahankan auth saat memanggil endpoint `/json/*` dan saat terhubung
|
||||
ke WebSocket CDP. Pilih environment variable atau secret manager untuk
|
||||
OpenClaw mempertahankan autentikasi saat memanggil endpoint `/json/*` dan saat terhubung
|
||||
ke WebSocket CDP. Gunakan environment variable atau pengelola secret untuk
|
||||
token alih-alih meng-commit-nya ke file konfigurasi.
|
||||
|
||||
## Proxy browser node (default tanpa konfigurasi)
|
||||
## Proksi browser node (default tanpa konfigurasi)
|
||||
|
||||
Jika Anda menjalankan **host node** di mesin yang memiliki browser Anda, OpenClaw dapat
|
||||
mengalihkan pemanggilan tool browser ke node itu secara otomatis tanpa konfigurasi browser tambahan.
|
||||
Ini adalah jalur default untuk gateway jarak jauh.
|
||||
secara otomatis merutekan pemanggilan alat browser ke node tersebut tanpa konfigurasi browser tambahan.
|
||||
Ini adalah jalur default untuk Gateway jarak jauh.
|
||||
|
||||
Catatan:
|
||||
|
||||
- Host node mengekspos server kontrol browser lokalnya melalui **perintah proxy**.
|
||||
- Profil berasal dari konfigurasi `browser.profiles` milik node sendiri (sama seperti lokal).
|
||||
- `nodeHost.browserProxy.allowProfiles` bersifat opsional. Biarkan kosong untuk perilaku lama/default: semua profil yang dikonfigurasi tetap dapat dijangkau melalui proxy, termasuk rute pembuatan/penghapusan profil.
|
||||
- Jika Anda menyetel `nodeHost.browserProxy.allowProfiles`, OpenClaw memperlakukannya sebagai batas least-privilege: hanya profil yang di-allowlist yang dapat ditargetkan, dan rute pembuatan/penghapusan profil persisten diblokir pada permukaan proxy.
|
||||
- Profil berasal dari konfigurasi `browser.profiles` milik node itu sendiri (sama seperti lokal).
|
||||
- `nodeHost.browserProxy.allowProfiles` bersifat opsional. Biarkan kosong untuk perilaku lama/default: semua profil yang dikonfigurasi tetap dapat dijangkau melalui proksi, termasuk rute buat/hapus profil.
|
||||
- Jika Anda menyetel `nodeHost.browserProxy.allowProfiles`, OpenClaw memperlakukannya sebagai batas least-privilege: hanya profil yang di-allowlist yang dapat ditargetkan, dan rute buat/hapus profil persisten diblokir pada permukaan proksi.
|
||||
- Nonaktifkan jika Anda tidak menginginkannya:
|
||||
- Di node: `nodeHost.browserProxy.enabled=false`
|
||||
- Di gateway: `gateway.nodes.browser.mode="off"`
|
||||
- Pada node: `nodeHost.browserProxy.enabled=false`
|
||||
- Pada gateway: `gateway.nodes.browser.mode="off"`
|
||||
|
||||
## Browserless (CDP jarak jauh terhosting)
|
||||
|
||||
[Browserless](https://browserless.io) adalah layanan Chromium terhosting yang mengekspos
|
||||
URL koneksi CDP melalui HTTPS dan WebSocket. OpenClaw dapat menggunakan keduanya, tetapi
|
||||
URL koneksi CDP melalui HTTPS dan WebSocket. OpenClaw dapat menggunakan salah satu bentuk tersebut, tetapi
|
||||
untuk profil browser jarak jauh, opsi paling sederhana adalah URL WebSocket langsung
|
||||
dari dokumentasi koneksi Browserless.
|
||||
|
||||
@ -314,18 +315,18 @@ Catatan:
|
||||
|
||||
- Ganti `<BROWSERLESS_API_KEY>` dengan token Browserless Anda yang sebenarnya.
|
||||
- Pilih endpoint region yang sesuai dengan akun Browserless Anda (lihat dokumentasi mereka).
|
||||
- Jika Browserless memberi Anda base URL HTTPS, Anda dapat mengubahnya menjadi
|
||||
`wss://` untuk koneksi CDP langsung atau mempertahankan URL HTTPS dan membiarkan OpenClaw
|
||||
- Jika Browserless memberi Anda URL dasar HTTPS, Anda dapat mengubahnya menjadi
|
||||
`wss://` untuk koneksi CDP langsung atau tetap menggunakan URL HTTPS dan membiarkan OpenClaw
|
||||
menemukan `/json/version`.
|
||||
|
||||
## Penyedia CDP WebSocket langsung
|
||||
|
||||
Beberapa layanan browser terhosting mengekspos endpoint **WebSocket langsung** alih-alih
|
||||
penemuan CDP berbasis HTTP standar (`/json/version`). OpenClaw mendukung keduanya:
|
||||
discovery CDP berbasis HTTP standar (`/json/version`). OpenClaw mendukung keduanya:
|
||||
|
||||
- **Endpoint HTTP(S)** — OpenClaw memanggil `/json/version` untuk menemukan
|
||||
URL debugger WebSocket, lalu terhubung.
|
||||
- **Endpoint WebSocket** (`ws://` / `wss://`) — OpenClaw terhubung langsung,
|
||||
- **Endpoint WebSocket** (`ws://` / `wss://`) — OpenClaw terhubung secara langsung,
|
||||
melewati `/json/version`. Gunakan ini untuk layanan seperti
|
||||
[Browserless](https://browserless.io),
|
||||
[Browserbase](https://www.browserbase.com), atau penyedia apa pun yang memberi Anda
|
||||
@ -334,8 +335,8 @@ penemuan CDP berbasis HTTP standar (`/json/version`). OpenClaw mendukung keduany
|
||||
### Browserbase
|
||||
|
||||
[Browserbase](https://www.browserbase.com) adalah platform cloud untuk menjalankan
|
||||
browser headless dengan pemecahan CAPTCHA bawaan, mode stealth, dan
|
||||
proxy residensial.
|
||||
browser headless dengan pemecahan CAPTCHA bawaan, mode stealth, dan proxy
|
||||
residensial.
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -356,13 +357,13 @@ proxy residensial.
|
||||
|
||||
Catatan:
|
||||
|
||||
- [Daftar](https://www.browserbase.com/sign-up) dan salin **API Key** Anda
|
||||
dari [dashboard Overview](https://www.browserbase.com/overview).
|
||||
- [Daftar](https://www.browserbase.com/sign-up) dan salin **API Key**
|
||||
Anda dari [dashboard Overview](https://www.browserbase.com/overview).
|
||||
- Ganti `<BROWSERBASE_API_KEY>` dengan API key Browserbase Anda yang sebenarnya.
|
||||
- Browserbase membuat sesi browser secara otomatis saat koneksi WebSocket, jadi tidak
|
||||
- Browserbase otomatis membuat sesi browser saat terhubung ke WebSocket, jadi tidak
|
||||
diperlukan langkah pembuatan sesi manual.
|
||||
- Paket gratis mengizinkan satu sesi bersamaan dan satu jam browser per bulan.
|
||||
Lihat [pricing](https://www.browserbase.com/pricing) untuk batas paket berbayar.
|
||||
- Tingkat gratis memungkinkan satu sesi bersamaan dan satu jam browser per bulan.
|
||||
Lihat [harga](https://www.browserbase.com/pricing) untuk batas paket berbayar.
|
||||
- Lihat [dokumentasi Browserbase](https://docs.browserbase.com) untuk referensi API
|
||||
lengkap, panduan SDK, dan contoh integrasi.
|
||||
|
||||
@ -370,46 +371,46 @@ Catatan:
|
||||
|
||||
Ide utama:
|
||||
|
||||
- Kontrol browser hanya loopback; akses mengalir melalui auth Gateway atau pairing node.
|
||||
- API HTTP browser loopback mandiri hanya menggunakan **auth shared-secret**:
|
||||
auth bearer token gateway, `x-openclaw-password`, atau auth dasar HTTP dengan
|
||||
- Kontrol browser hanya loopback; akses mengalir melalui autentikasi Gateway atau pairing node.
|
||||
- API HTTP browser loopback mandiri hanya menggunakan **autentikasi shared-secret**:
|
||||
autentikasi bearer token gateway, `x-openclaw-password`, atau HTTP Basic auth dengan
|
||||
kata sandi gateway yang dikonfigurasi.
|
||||
- Header identitas Tailscale Serve dan `gateway.auth.mode: "trusted-proxy"` **tidak**
|
||||
mengautentikasi API browser loopback mandiri ini.
|
||||
- Jika kontrol browser diaktifkan dan tidak ada auth shared-secret yang dikonfigurasi, OpenClaw
|
||||
- Header identitas Tailscale Serve dan `gateway.auth.mode: "trusted-proxy"`
|
||||
**tidak** mengautentikasi API browser loopback mandiri ini.
|
||||
- Jika kontrol browser diaktifkan dan tidak ada autentikasi shared-secret yang dikonfigurasi, OpenClaw
|
||||
otomatis membuat `gateway.auth.token` saat startup dan menyimpannya ke konfigurasi.
|
||||
- OpenClaw **tidak** otomatis membuat token itu ketika `gateway.auth.mode` sudah
|
||||
- OpenClaw **tidak** otomatis membuat token tersebut ketika `gateway.auth.mode` sudah
|
||||
`password`, `none`, atau `trusted-proxy`.
|
||||
- Pertahankan Gateway dan host node apa pun di jaringan privat (Tailscale); hindari paparan publik.
|
||||
- Perlakukan URL/token CDP jarak jauh sebagai secret; pilih env vars atau secret manager.
|
||||
- Simpan Gateway dan host node apa pun di jaringan privat (Tailscale); hindari eksposur publik.
|
||||
- Perlakukan URL/token CDP jarak jauh sebagai secret; gunakan environment variable atau pengelola secret.
|
||||
|
||||
Tips CDP jarak jauh:
|
||||
|
||||
- Pilih endpoint terenkripsi (HTTPS atau WSS) dan token berumur pendek jika memungkinkan.
|
||||
- Hindari menanam token berumur panjang langsung di file konfigurasi.
|
||||
- Gunakan endpoint terenkripsi (HTTPS atau WSS) dan token berumur pendek jika memungkinkan.
|
||||
- Hindari menyematkan token berumur panjang langsung di file konfigurasi.
|
||||
|
||||
## Profil (multi-browser)
|
||||
|
||||
OpenClaw mendukung beberapa profil bernama (konfigurasi perutean). Profil dapat berupa:
|
||||
OpenClaw mendukung beberapa profil bernama (konfigurasi routing). Profil dapat berupa:
|
||||
|
||||
- **dikelola openclaw**: instance browser berbasis Chromium khusus dengan direktori data pengguna + port CDP sendiri
|
||||
- **dikelola openclaw**: instance browser berbasis Chromium khusus dengan direktori data pengguna + port CDP-nya sendiri
|
||||
- **jarak jauh**: URL CDP eksplisit (browser berbasis Chromium yang berjalan di tempat lain)
|
||||
- **sesi yang ada**: profil Chrome Anda yang ada melalui koneksi otomatis Chrome DevTools MCP
|
||||
- **sesi yang sudah ada**: profil Chrome Anda yang sudah ada melalui koneksi otomatis Chrome DevTools MCP
|
||||
|
||||
Default:
|
||||
|
||||
- Profil `openclaw` dibuat otomatis jika belum ada.
|
||||
- Profil `user` sudah bawaan untuk attach existing-session Chrome MCP.
|
||||
- Profil `openclaw` dibuat otomatis jika tidak ada.
|
||||
- Profil `user` bawaan tersedia untuk attach existing-session Chrome MCP.
|
||||
- Profil existing-session bersifat opt-in di luar `user`; buat dengan `--driver existing-session`.
|
||||
- Port CDP lokal dialokasikan dari **18800–18899** secara default.
|
||||
- Menghapus profil memindahkan direktori data lokalnya ke Trash.
|
||||
- Menghapus profil akan memindahkan direktori data lokalnya ke Trash.
|
||||
|
||||
Semua endpoint kontrol menerima `?profile=<name>`; CLI menggunakan `--browser-profile`.
|
||||
|
||||
## Existing-session melalui Chrome DevTools MCP
|
||||
|
||||
OpenClaw juga dapat menempel ke profil browser berbasis Chromium yang sedang berjalan melalui
|
||||
server resmi Chrome DevTools MCP. Ini menggunakan kembali tab dan status login
|
||||
OpenClaw juga dapat attach ke profil browser berbasis Chromium yang sedang berjalan melalui
|
||||
server MCP Chrome DevTools resmi. Ini menggunakan kembali tab dan status login
|
||||
yang sudah terbuka di profil browser tersebut.
|
||||
|
||||
Latar belakang resmi dan referensi penyiapan:
|
||||
@ -421,7 +422,7 @@ Profil bawaan:
|
||||
|
||||
- `user`
|
||||
|
||||
Opsional: buat profil existing-session kustom Anda sendiri jika menginginkan
|
||||
Opsional: buat profil existing-session kustom Anda sendiri jika Anda menginginkan
|
||||
nama, warna, atau direktori data browser yang berbeda.
|
||||
|
||||
Perilaku default:
|
||||
@ -446,11 +447,11 @@ Gunakan `userDataDir` untuk Brave, Edge, Chromium, atau profil Chrome non-defaul
|
||||
}
|
||||
```
|
||||
|
||||
Lalu di browser yang sesuai:
|
||||
Lalu pada browser yang sesuai:
|
||||
|
||||
1. Buka halaman inspect browser tersebut untuk debugging jarak jauh.
|
||||
1. Buka halaman inspect browser tersebut untuk remote debugging.
|
||||
2. Aktifkan remote debugging.
|
||||
3. Biarkan browser tetap berjalan dan setujui prompt koneksi saat OpenClaw menempel.
|
||||
3. Biarkan browser tetap berjalan dan setujui prompt koneksi saat OpenClaw melakukan attach.
|
||||
|
||||
Halaman inspect umum:
|
||||
|
||||
@ -458,7 +459,7 @@ Halaman inspect umum:
|
||||
- Brave: `brave://inspect/#remote-debugging`
|
||||
- Edge: `edge://inspect/#remote-debugging`
|
||||
|
||||
Smoke test attach langsung:
|
||||
Uji smoke attach langsung:
|
||||
|
||||
```bash
|
||||
openclaw browser --browser-profile user start
|
||||
@ -467,36 +468,36 @@ openclaw browser --browser-profile user tabs
|
||||
openclaw browser --browser-profile user snapshot --format ai
|
||||
```
|
||||
|
||||
Seperti apa keberhasilan itu:
|
||||
Seperti apa hasil yang berhasil:
|
||||
|
||||
- `status` menampilkan `driver: existing-session`
|
||||
- `status` menampilkan `transport: chrome-mcp`
|
||||
- `status` menampilkan `running: true`
|
||||
- `tabs` mencantumkan tab browser Anda yang sudah terbuka
|
||||
- `snapshot` mengembalikan ref dari tab aktif yang dipilih
|
||||
- `tabs` menampilkan tab browser Anda yang sudah terbuka
|
||||
- `snapshot` mengembalikan ref dari tab live yang dipilih
|
||||
|
||||
Yang perlu diperiksa jika attach tidak berfungsi:
|
||||
|
||||
- browser berbasis Chromium target adalah versi `144+`
|
||||
- remote debugging diaktifkan di halaman inspect browser tersebut
|
||||
- browser menampilkan prompt consent attach dan Anda menerimanya
|
||||
- `openclaw doctor` memigrasikan konfigurasi browser lama berbasis extension dan memeriksa bahwa
|
||||
Chrome terinstal secara lokal untuk profil koneksi otomatis default, tetapi tidak dapat
|
||||
- browser berbasis Chromium target memiliki versi `144+`
|
||||
- remote debugging diaktifkan pada halaman inspect browser tersebut
|
||||
- browser menampilkan prompt persetujuan attach dan Anda menerimanya
|
||||
- `openclaw doctor` memigrasikan konfigurasi browser lama berbasis ekstensi dan memeriksa bahwa
|
||||
Chrome terpasang secara lokal untuk profil default auto-connect, tetapi tidak dapat
|
||||
mengaktifkan remote debugging di sisi browser untuk Anda
|
||||
|
||||
Penggunaan agen:
|
||||
|
||||
- Gunakan `profile="user"` ketika Anda memerlukan status browser pengguna yang sudah login.
|
||||
- Jika Anda menggunakan profil existing-session kustom, berikan nama profil eksplisit tersebut.
|
||||
- Pilih mode ini hanya ketika pengguna berada di komputer untuk menyetujui prompt
|
||||
- Gunakan `profile="user"` saat Anda memerlukan status browser pengguna yang sudah login.
|
||||
- Jika Anda menggunakan profil existing-session kustom, kirim nama profil eksplisit tersebut.
|
||||
- Pilih mode ini hanya ketika pengguna berada di depan komputer untuk menyetujui prompt
|
||||
attach.
|
||||
- Gateway atau host node dapat memunculkan `npx chrome-devtools-mcp@latest --autoConnect`
|
||||
- Gateway atau host node dapat menjalankan `npx chrome-devtools-mcp@latest --autoConnect`
|
||||
|
||||
Catatan:
|
||||
|
||||
- Jalur ini berisiko lebih tinggi daripada profil `openclaw` yang terisolasi karena dapat
|
||||
- Jalur ini berisiko lebih tinggi dibanding profil `openclaw` yang terisolasi karena dapat
|
||||
bertindak di dalam sesi browser Anda yang sudah login.
|
||||
- OpenClaw tidak meluncurkan browser untuk driver ini; OpenClaw hanya menempel ke
|
||||
- OpenClaw tidak meluncurkan browser untuk driver ini; ia hanya attach ke
|
||||
sesi yang sudah ada.
|
||||
- OpenClaw menggunakan alur resmi Chrome DevTools MCP `--autoConnect` di sini. Jika
|
||||
`userDataDir` disetel, OpenClaw meneruskannya untuk menargetkan direktori data pengguna
|
||||
@ -506,30 +507,30 @@ Catatan:
|
||||
- Screenshot halaman existing-session berfungsi tanpa Playwright melalui Chrome MCP.
|
||||
Screenshot elemen berbasis ref (`--ref`) juga berfungsi di sana, tetapi `--full-page`
|
||||
tidak dapat digabungkan dengan `--ref` atau `--element`.
|
||||
- Tindakan existing-session masih lebih terbatas daripada
|
||||
jalur browser terkelola:
|
||||
- Aksi existing-session masih lebih terbatas dibanding jalur browser terkelola:
|
||||
- `click`, `type`, `hover`, `scrollIntoView`, `drag`, dan `select` memerlukan
|
||||
ref snapshot alih-alih selector CSS
|
||||
- `click` hanya tombol kiri (tanpa override tombol atau modifier)
|
||||
- `click` hanya mendukung tombol kiri (tanpa override tombol atau modifier)
|
||||
- `type` tidak mendukung `slowly=true`; gunakan `fill` atau `press`
|
||||
- `press` tidak mendukung `delayMs`
|
||||
- `hover`, `scrollIntoView`, `drag`, `select`, `fill`, dan `evaluate` tidak
|
||||
mendukung override timeout per pemanggilan
|
||||
mendukung override timeout per panggilan
|
||||
- `select` saat ini hanya mendukung satu nilai
|
||||
- Existing-session `wait --url` mendukung pola exact, substring, dan glob
|
||||
seperti driver browser lainnya. `wait --load networkidle` belum didukung.
|
||||
- Hook upload existing-session memerlukan `ref` atau `inputRef`, mendukung satu file
|
||||
sekaligus, dan tidak mendukung penargetan CSS `element`.
|
||||
per kali, dan tidak mendukung penargetan CSS `element`.
|
||||
- Hook dialog existing-session tidak mendukung override timeout.
|
||||
- Beberapa fitur masih memerlukan jalur browser terkelola, termasuk tindakan batch, ekspor PDF, intersepsi unduhan, dan `responsebody`.
|
||||
- Existing-session bersifat lokal ke host. Jika Chrome berada di mesin lain atau
|
||||
namespace jaringan berbeda, gunakan CDP jarak jauh atau host node.
|
||||
- Beberapa fitur masih memerlukan jalur browser terkelola, termasuk aksi
|
||||
batch, ekspor PDF, intersepsi unduhan, dan `responsebody`.
|
||||
- Existing-session bersifat host-local. Jika Chrome berada di mesin lain atau
|
||||
namespace jaringan yang berbeda, gunakan CDP jarak jauh atau host node.
|
||||
|
||||
## Jaminan isolasi
|
||||
|
||||
- **Direktori data pengguna khusus**: tidak pernah menyentuh profil browser pribadi Anda.
|
||||
- **Port khusus**: menghindari `9222` untuk mencegah benturan dengan alur kerja pengembangan.
|
||||
- **Kontrol tab deterministik**: targetkan tab berdasarkan `targetId`, bukan “tab terakhir”.
|
||||
- **Kontrol tab yang deterministik**: targetkan tab berdasarkan `targetId`, bukan “tab terakhir”.
|
||||
|
||||
## Pemilihan browser
|
||||
|
||||
@ -541,12 +542,12 @@ Saat meluncurkan secara lokal, OpenClaw memilih yang pertama tersedia:
|
||||
4. Chromium
|
||||
5. Chrome Canary
|
||||
|
||||
Anda dapat menimpa dengan `browser.executablePath`.
|
||||
Anda dapat meng-override dengan `browser.executablePath`.
|
||||
|
||||
Platform:
|
||||
|
||||
- macOS: memeriksa `/Applications` dan `~/Applications`.
|
||||
- Linux: mencari `google-chrome`, `brave`, `microsoft-edge`, `chromium`, dll.
|
||||
- Linux: mencari `google-chrome`, `brave`, `microsoft-edge`, `chromium`, dan sebagainya.
|
||||
- Windows: memeriksa lokasi instalasi umum.
|
||||
|
||||
## API kontrol (opsional)
|
||||
@ -556,29 +557,29 @@ Hanya untuk integrasi lokal, Gateway mengekspos API HTTP loopback kecil:
|
||||
- Status/start/stop: `GET /`, `POST /start`, `POST /stop`
|
||||
- Tab: `GET /tabs`, `POST /tabs/open`, `POST /tabs/focus`, `DELETE /tabs/:targetId`
|
||||
- Snapshot/screenshot: `GET /snapshot`, `POST /screenshot`
|
||||
- Tindakan: `POST /navigate`, `POST /act`
|
||||
- Aksi: `POST /navigate`, `POST /act`
|
||||
- Hook: `POST /hooks/file-chooser`, `POST /hooks/dialog`
|
||||
- Unduhan: `POST /download`, `POST /wait/download`
|
||||
- Debugging: `GET /console`, `POST /pdf`
|
||||
- Debugging: `GET /errors`, `GET /requests`, `POST /trace/start`, `POST /trace/stop`, `POST /highlight`
|
||||
- Jaringan: `POST /response/body`
|
||||
- State: `GET /cookies`, `POST /cookies/set`, `POST /cookies/clear`
|
||||
- State: `GET /storage/:kind`, `POST /storage/:kind/set`, `POST /storage/:kind/clear`
|
||||
- Status: `GET /cookies`, `POST /cookies/set`, `POST /cookies/clear`
|
||||
- Status: `GET /storage/:kind`, `POST /storage/:kind/set`, `POST /storage/:kind/clear`
|
||||
- Pengaturan: `POST /set/offline`, `POST /set/headers`, `POST /set/credentials`, `POST /set/geolocation`, `POST /set/media`, `POST /set/timezone`, `POST /set/locale`, `POST /set/device`
|
||||
|
||||
Semua endpoint menerima `?profile=<name>`.
|
||||
|
||||
Jika auth gateway shared-secret dikonfigurasi, rute HTTP browser juga memerlukan auth:
|
||||
Jika autentikasi gateway shared-secret dikonfigurasi, rute HTTP browser juga memerlukan autentikasi:
|
||||
|
||||
- `Authorization: Bearer <gateway token>`
|
||||
- `x-openclaw-password: <gateway password>` atau auth dasar HTTP dengan kata sandi tersebut
|
||||
- `x-openclaw-password: <gateway password>` atau HTTP Basic auth dengan kata sandi tersebut
|
||||
|
||||
Catatan:
|
||||
|
||||
- API browser loopback mandiri ini **tidak** menggunakan header identitas trusted-proxy atau
|
||||
Tailscale Serve.
|
||||
- API browser loopback mandiri ini **tidak** menggunakan trusted-proxy atau
|
||||
header identitas Tailscale Serve.
|
||||
- Jika `gateway.auth.mode` adalah `none` atau `trusted-proxy`, rute browser loopback
|
||||
ini tidak mewarisi mode pembawa identitas tersebut; pertahankan tetap loopback-only.
|
||||
ini tidak mewarisi mode pembawa identitas tersebut; biarkan tetap hanya loopback.
|
||||
|
||||
### Kontrak error `/act`
|
||||
|
||||
@ -592,28 +593,28 @@ kegagalan kebijakan:
|
||||
Nilai `code` saat ini:
|
||||
|
||||
- `ACT_KIND_REQUIRED` (HTTP 400): `kind` hilang atau tidak dikenali.
|
||||
- `ACT_INVALID_REQUEST` (HTTP 400): payload tindakan gagal dinormalisasi atau divalidasi.
|
||||
- `ACT_SELECTOR_UNSUPPORTED` (HTTP 400): `selector` digunakan dengan jenis tindakan yang tidak didukung.
|
||||
- `ACT_INVALID_REQUEST` (HTTP 400): payload aksi gagal dinormalisasi atau divalidasi.
|
||||
- `ACT_SELECTOR_UNSUPPORTED` (HTTP 400): `selector` digunakan dengan jenis aksi yang tidak didukung.
|
||||
- `ACT_EVALUATE_DISABLED` (HTTP 403): `evaluate` (atau `wait --fn`) dinonaktifkan oleh konfigurasi.
|
||||
- `ACT_TARGET_ID_MISMATCH` (HTTP 403): `targetId` tingkat atas atau batch bertentangan dengan target permintaan.
|
||||
- `ACT_EXISTING_SESSION_UNSUPPORTED` (HTTP 501): tindakan tidak didukung untuk profil existing-session.
|
||||
- `ACT_EXISTING_SESSION_UNSUPPORTED` (HTTP 501): aksi tidak didukung untuk profil existing-session.
|
||||
|
||||
Kegagalan runtime lainnya masih dapat mengembalikan `{ "error": "<message>" }` tanpa field
|
||||
`code`.
|
||||
Kegagalan runtime lainnya mungkin masih mengembalikan `{ "error": "<message>" }` tanpa
|
||||
field `code`.
|
||||
|
||||
### Persyaratan Playwright
|
||||
|
||||
Beberapa fitur (navigate/act/snapshot AI/snapshot role, screenshot elemen,
|
||||
PDF) memerlukan Playwright. Jika Playwright tidak terinstal, endpoint tersebut mengembalikan
|
||||
PDF) memerlukan Playwright. Jika Playwright belum terpasang, endpoint tersebut mengembalikan
|
||||
error 501 yang jelas.
|
||||
|
||||
Yang masih berfungsi tanpa Playwright:
|
||||
|
||||
- Snapshot ARIA
|
||||
- Screenshot halaman untuk browser `openclaw` terkelola ketika WebSocket CDP
|
||||
per-tab tersedia
|
||||
- Screenshot halaman untuk browser `openclaw` terkelola ketika tersedia WebSocket
|
||||
CDP per tab
|
||||
- Screenshot halaman untuk profil `existing-session` / Chrome MCP
|
||||
- Screenshot berbasis ref existing-session (`--ref`) dari output snapshot
|
||||
- Screenshot existing-session berbasis ref (`--ref`) dari output snapshot
|
||||
|
||||
Yang masih memerlukan Playwright:
|
||||
|
||||
@ -627,10 +628,10 @@ Screenshot elemen juga menolak `--full-page`; rute mengembalikan `fullPage is
|
||||
not supported for element screenshots`.
|
||||
|
||||
Jika Anda melihat `Playwright is not available in this gateway build`, instal paket
|
||||
Playwright lengkap (bukan `playwright-core`) lalu restart gateway, atau instal ulang
|
||||
Playwright penuh (bukan `playwright-core`) dan mulai ulang gateway, atau instal ulang
|
||||
OpenClaw dengan dukungan browser.
|
||||
|
||||
#### Instalasi Docker Playwright
|
||||
#### Instalasi Playwright di Docker
|
||||
|
||||
Jika Gateway Anda berjalan di Docker, hindari `npx playwright` (konflik override npm).
|
||||
Gunakan CLI bawaan sebagai gantinya:
|
||||
@ -650,9 +651,9 @@ Alur tingkat tinggi:
|
||||
|
||||
- Sebuah **server kontrol** kecil menerima permintaan HTTP.
|
||||
- Server ini terhubung ke browser berbasis Chromium (Chrome/Brave/Edge/Chromium) melalui **CDP**.
|
||||
- Untuk tindakan lanjutan (klik/ketik/snapshot/PDF), server ini menggunakan **Playwright** di atas
|
||||
- Untuk aksi lanjutan (klik/ketik/snapshot/PDF), server ini menggunakan **Playwright** di atas
|
||||
CDP.
|
||||
- Saat Playwright tidak tersedia, hanya operasi non-Playwright yang tersedia.
|
||||
- Saat Playwright tidak ada, hanya operasi non-Playwright yang tersedia.
|
||||
|
||||
Desain ini menjaga agen tetap berada pada antarmuka yang stabil dan deterministik sambil memungkinkan
|
||||
Anda menukar browser dan profil lokal/jarak jauh.
|
||||
@ -662,7 +663,7 @@ Anda menukar browser dan profil lokal/jarak jauh.
|
||||
Semua perintah menerima `--browser-profile <name>` untuk menargetkan profil tertentu.
|
||||
Semua perintah juga menerima `--json` untuk output yang dapat dibaca mesin (payload stabil).
|
||||
|
||||
Dasar:
|
||||
Dasar-dasar:
|
||||
|
||||
- `openclaw browser status`
|
||||
- `openclaw browser start`
|
||||
@ -693,16 +694,16 @@ Inspeksi:
|
||||
|
||||
Catatan siklus hidup:
|
||||
|
||||
- Untuk profil attach-only dan CDP jarak jauh, `openclaw browser stop` tetap menjadi
|
||||
- Untuk profil attach-only dan CDP jarak jauh, `openclaw browser stop` tetap merupakan
|
||||
perintah pembersihan yang tepat setelah pengujian. Perintah ini menutup sesi kontrol aktif dan
|
||||
membersihkan override emulasi sementara alih-alih mematikan browser
|
||||
yang mendasarinya.
|
||||
menghapus override emulasi sementara alih-alih mematikan browser
|
||||
dasarnya.
|
||||
- `openclaw browser errors --clear`
|
||||
- `openclaw browser requests --filter api --clear`
|
||||
- `openclaw browser pdf`
|
||||
- `openclaw browser responsebody "**/api" --max-chars 5000`
|
||||
|
||||
Tindakan:
|
||||
Aksi:
|
||||
|
||||
- `openclaw browser navigate https://example.com`
|
||||
- `openclaw browser resize 1280 720`
|
||||
@ -726,7 +727,7 @@ Tindakan:
|
||||
- `openclaw browser trace start`
|
||||
- `openclaw browser trace stop`
|
||||
|
||||
State:
|
||||
Status:
|
||||
|
||||
- `openclaw browser cookies`
|
||||
- `openclaw browser cookies set session abc123 --url "https://example.com"`
|
||||
@ -747,25 +748,25 @@ State:
|
||||
|
||||
Catatan:
|
||||
|
||||
- `upload` dan `dialog` adalah pemanggilan **arming**; jalankan sebelum klik/tekan
|
||||
- `upload` dan `dialog` adalah panggilan **arming**; jalankan keduanya sebelum klik/press
|
||||
yang memicu chooser/dialog.
|
||||
- Path output unduhan dan trace dibatasi ke root temp OpenClaw:
|
||||
- Jalur output unduhan dan trace dibatasi ke root temp OpenClaw:
|
||||
- trace: `/tmp/openclaw` (fallback: `${os.tmpdir()}/openclaw`)
|
||||
- unduhan: `/tmp/openclaw/downloads` (fallback: `${os.tmpdir()}/openclaw/downloads`)
|
||||
- Path upload dibatasi ke root upload temp OpenClaw:
|
||||
- Jalur upload dibatasi ke root upload temp OpenClaw:
|
||||
- upload: `/tmp/openclaw/uploads` (fallback: `${os.tmpdir()}/openclaw/uploads`)
|
||||
- `upload` juga dapat menyetel input file secara langsung melalui `--input-ref` atau `--element`.
|
||||
- `snapshot`:
|
||||
- `--format ai` (default saat Playwright terinstal): mengembalikan snapshot AI dengan ref numerik (`aria-ref="<n>"`).
|
||||
- `--format aria`: mengembalikan tree aksesibilitas (tanpa ref; hanya untuk inspeksi).
|
||||
- `--efficient` (atau `--mode efficient`): preset snapshot peran ringkas (interaktif + ringkas + kedalaman + maxChars lebih rendah).
|
||||
- Default konfigurasi (hanya tool/CLI): setel `browser.snapshotDefaults.mode: "efficient"` untuk menggunakan snapshot efisien saat pemanggil tidak memberikan mode (lihat [Gateway configuration](/id/gateway/configuration-reference#browser)).
|
||||
- Opsi snapshot peran (`--interactive`, `--compact`, `--depth`, `--selector`) memaksa snapshot berbasis peran dengan ref seperti `ref=e12`.
|
||||
- `--frame "<iframe selector>"` membatasi snapshot peran ke sebuah iframe (berpasangan dengan ref peran seperti `e12`).
|
||||
- `--interactive` menampilkan daftar datar elemen interaktif yang mudah dipilih (terbaik untuk menjalankan tindakan).
|
||||
- `--labels` menambahkan screenshot hanya viewport dengan label ref yang dioverlay (mencetak `MEDIA:<path>`).
|
||||
- `click`/`type`/dll memerlukan `ref` dari `snapshot` (baik numerik `12` atau ref peran `e12`).
|
||||
Selector CSS sengaja tidak didukung untuk tindakan.
|
||||
- `--format ai` (default saat Playwright terpasang): mengembalikan snapshot AI dengan ref numerik (`aria-ref="<n>"`).
|
||||
- `--format aria`: mengembalikan pohon aksesibilitas (tanpa ref; hanya untuk inspeksi).
|
||||
- `--efficient` (atau `--mode efficient`): preset snapshot role ringkas (interactive + compact + depth + maxChars lebih rendah).
|
||||
- Default konfigurasi (hanya tool/CLI): setel `browser.snapshotDefaults.mode: "efficient"` untuk menggunakan snapshot efisien saat pemanggil tidak memberikan mode (lihat [Konfigurasi Gateway](/id/gateway/configuration-reference#browser)).
|
||||
- Opsi snapshot role (`--interactive`, `--compact`, `--depth`, `--selector`) memaksa snapshot berbasis role dengan ref seperti `ref=e12`.
|
||||
- `--frame "<iframe selector>"` membatasi snapshot role ke sebuah iframe (dipasangkan dengan ref role seperti `e12`).
|
||||
- `--interactive` menghasilkan daftar datar elemen interaktif yang mudah dipilih (terbaik untuk menjalankan aksi).
|
||||
- `--labels` menambahkan screenshot hanya viewport dengan label ref di atasnya (mencetak `MEDIA:<path>`).
|
||||
- `click`/`type`/dll memerlukan `ref` dari `snapshot` (baik numerik `12` maupun ref role `e12`).
|
||||
Selector CSS memang sengaja tidak didukung untuk aksi.
|
||||
|
||||
## Snapshot dan ref
|
||||
|
||||
@ -773,34 +774,34 @@ OpenClaw mendukung dua gaya “snapshot”:
|
||||
|
||||
- **Snapshot AI (ref numerik)**: `openclaw browser snapshot` (default; `--format ai`)
|
||||
- Output: snapshot teks yang menyertakan ref numerik.
|
||||
- Tindakan: `openclaw browser click 12`, `openclaw browser type 23 "hello"`.
|
||||
- Secara internal, ref diresolusikan melalui `aria-ref` milik Playwright.
|
||||
- Aksi: `openclaw browser click 12`, `openclaw browser type 23 "hello"`.
|
||||
- Secara internal, ref diselesaikan melalui `aria-ref` milik Playwright.
|
||||
|
||||
- **Snapshot peran (ref peran seperti `e12`)**: `openclaw browser snapshot --interactive` (atau `--compact`, `--depth`, `--selector`, `--frame`)
|
||||
- Output: daftar/tree berbasis peran dengan `[ref=e12]` (dan opsional `[nth=1]`).
|
||||
- Tindakan: `openclaw browser click e12`, `openclaw browser highlight e12`.
|
||||
- Secara internal, ref diresolusikan melalui `getByRole(...)` (ditambah `nth()` untuk duplikat).
|
||||
- **Snapshot role (ref role seperti `e12`)**: `openclaw browser snapshot --interactive` (atau `--compact`, `--depth`, `--selector`, `--frame`)
|
||||
- Output: daftar/pohon berbasis role dengan `[ref=e12]` (dan `[nth=1]` opsional).
|
||||
- Aksi: `openclaw browser click e12`, `openclaw browser highlight e12`.
|
||||
- Secara internal, ref diselesaikan melalui `getByRole(...)` (ditambah `nth()` untuk duplikasi).
|
||||
- Tambahkan `--labels` untuk menyertakan screenshot viewport dengan label `e12` yang dioverlay.
|
||||
|
||||
Perilaku ref:
|
||||
|
||||
- Ref **tidak stabil antar navigasi**; jika sesuatu gagal, jalankan ulang `snapshot` dan gunakan ref baru.
|
||||
- Jika snapshot peran diambil dengan `--frame`, ref peran dibatasi ke iframe itu sampai snapshot peran berikutnya.
|
||||
- Ref **tidak stabil di seluruh navigasi**; jika sesuatu gagal, jalankan ulang `snapshot` dan gunakan ref baru.
|
||||
- Jika snapshot role diambil dengan `--frame`, ref role dibatasi ke iframe tersebut sampai snapshot role berikutnya.
|
||||
|
||||
## Peningkatan kemampuan wait
|
||||
## Peningkatan wait
|
||||
|
||||
Anda dapat menunggu lebih dari sekadar waktu/teks:
|
||||
|
||||
- Tunggu URL (glob didukung oleh Playwright):
|
||||
- `openclaw browser wait --url "**/dash"`
|
||||
- Tunggu status muat:
|
||||
- Tunggu status load:
|
||||
- `openclaw browser wait --load networkidle`
|
||||
- Tunggu predikat JS:
|
||||
- `openclaw browser wait --fn "window.ready===true"`
|
||||
- Tunggu selector menjadi terlihat:
|
||||
- `openclaw browser wait "#main"`
|
||||
|
||||
Semua ini dapat digabungkan:
|
||||
Ini dapat digabungkan:
|
||||
|
||||
```bash
|
||||
openclaw browser wait "#main" \
|
||||
@ -812,11 +813,11 @@ openclaw browser wait "#main" \
|
||||
|
||||
## Alur kerja debug
|
||||
|
||||
Saat suatu tindakan gagal (mis. “not visible”, “strict mode violation”, “covered”):
|
||||
Saat sebuah aksi gagal (mis. “not visible”, “strict mode violation”, “covered”):
|
||||
|
||||
1. `openclaw browser snapshot --interactive`
|
||||
2. Gunakan `click <ref>` / `type <ref>` (pilih ref peran dalam mode interaktif)
|
||||
3. Jika masih gagal: `openclaw browser highlight <ref>` untuk melihat apa yang ditargetkan Playwright
|
||||
2. Gunakan `click <ref>` / `type <ref>` (utamakan ref role dalam mode interaktif)
|
||||
3. Jika masih gagal: `openclaw browser highlight <ref>` untuk melihat target Playwright
|
||||
4. Jika perilaku halaman aneh:
|
||||
- `openclaw browser errors --clear`
|
||||
- `openclaw browser requests --filter api --clear`
|
||||
@ -827,7 +828,7 @@ Saat suatu tindakan gagal (mis. “not visible”, “strict mode violation”,
|
||||
|
||||
## Output JSON
|
||||
|
||||
`--json` ditujukan untuk scripting dan tool terstruktur.
|
||||
`--json` ditujukan untuk scripting dan tooling terstruktur.
|
||||
|
||||
Contoh:
|
||||
|
||||
@ -838,33 +839,33 @@ openclaw browser requests --filter api --json
|
||||
openclaw browser cookies --json
|
||||
```
|
||||
|
||||
Snapshot peran dalam JSON menyertakan `refs` ditambah blok `stats` kecil (baris/karakter/ref/interaktif) agar tool dapat mempertimbangkan ukuran dan kepadatan payload.
|
||||
Snapshot role dalam JSON menyertakan `refs` plus blok `stats` kecil (lines/chars/refs/interactive) sehingga tool dapat menalar ukuran dan kepadatan payload.
|
||||
|
||||
## Knob state dan lingkungan
|
||||
## Pengaturan status dan environment
|
||||
|
||||
Ini berguna untuk alur kerja “buat situs berperilaku seperti X”:
|
||||
|
||||
- Cookies: `cookies`, `cookies set`, `cookies clear`
|
||||
- Cookie: `cookies`, `cookies set`, `cookies clear`
|
||||
- Storage: `storage local|session get|set|clear`
|
||||
- Offline: `set offline on|off`
|
||||
- Headers: `set headers --headers-json '{"X-Debug":"1"}'` (`set headers --json '{"X-Debug":"1"}'` lama tetap didukung)
|
||||
- Auth dasar HTTP: `set credentials user pass` (atau `--clear`)
|
||||
- Header: `set headers --headers-json '{"X-Debug":"1"}'` (versi lama `set headers --json '{"X-Debug":"1"}'` tetap didukung)
|
||||
- HTTP basic auth: `set credentials user pass` (atau `--clear`)
|
||||
- Geolokasi: `set geo <lat> <lon> --origin "https://example.com"` (atau `--clear`)
|
||||
- Media: `set media dark|light|no-preference|none`
|
||||
- Zona waktu / locale: `set timezone ...`, `set locale ...`
|
||||
- Zona waktu / lokal: `set timezone ...`, `set locale ...`
|
||||
- Perangkat / viewport:
|
||||
- `set device "iPhone 14"` (preset perangkat Playwright)
|
||||
- `set viewport 1280 720`
|
||||
|
||||
## Keamanan & privasi
|
||||
|
||||
- Profil browser openclaw mungkin berisi sesi yang sudah login; perlakukan sebagai data sensitif.
|
||||
- Profil browser openclaw dapat berisi sesi yang sudah login; perlakukan sebagai sesuatu yang sensitif.
|
||||
- `browser act kind=evaluate` / `openclaw browser evaluate` dan `wait --fn`
|
||||
mengeksekusi JavaScript arbitrer dalam konteks halaman. Prompt injection dapat
|
||||
mengarahkannya. Nonaktifkan dengan `browser.evaluateEnabled=false` jika Anda tidak memerlukannya.
|
||||
- Untuk login dan catatan anti-bot (X/Twitter, dll.), lihat [Browser login + X/Twitter posting](/id/tools/browser-login).
|
||||
- Pertahankan Gateway/host node tetap privat (hanya loopback atau tailnet).
|
||||
- Endpoint CDP jarak jauh sangat kuat; lakukan tunneling dan lindungi endpoint tersebut.
|
||||
mengeksekusi JavaScript arbitrer dalam konteks halaman. Injeksi prompt dapat mengarahkan
|
||||
hal ini. Nonaktifkan dengan `browser.evaluateEnabled=false` jika Anda tidak membutuhkannya.
|
||||
- Untuk login dan catatan anti-bot (X/Twitter, dll.), lihat [Login browser + posting X/Twitter](/id/tools/browser-login).
|
||||
- Jaga agar Gateway/host node tetap privat (hanya loopback atau tailnet).
|
||||
- Endpoint CDP jarak jauh sangat kuat; tunnel-kan dan lindungi endpoint tersebut.
|
||||
|
||||
Contoh mode ketat (blokir tujuan privat/internal secara default):
|
||||
|
||||
@ -874,7 +875,7 @@ Contoh mode ketat (blokir tujuan privat/internal secara default):
|
||||
ssrfPolicy: {
|
||||
dangerouslyAllowPrivateNetwork: false,
|
||||
hostnameAllowlist: ["*.example.com", "example.com"],
|
||||
allowedHostnames: ["localhost"], // allow tepat opsional
|
||||
allowedHostnames: ["localhost"], // exact allow opsional
|
||||
},
|
||||
},
|
||||
}
|
||||
@ -883,33 +884,90 @@ Contoh mode ketat (blokir tujuan privat/internal secara default):
|
||||
## Pemecahan masalah
|
||||
|
||||
Untuk masalah khusus Linux (terutama snap Chromium), lihat
|
||||
[Browser troubleshooting](/id/tools/browser-linux-troubleshooting).
|
||||
[Pemecahan masalah browser](/id/tools/browser-linux-troubleshooting).
|
||||
|
||||
Untuk setup host-terpisah WSL2 Gateway + Windows Chrome, lihat
|
||||
[WSL2 + Windows + remote Chrome CDP troubleshooting](/id/tools/browser-wsl2-windows-remote-cdp-troubleshooting).
|
||||
Untuk setup host terpisah WSL2 Gateway + Windows Chrome, lihat
|
||||
[Pemecahan masalah WSL2 + Windows + remote Chrome CDP](/id/tools/browser-wsl2-windows-remote-cdp-troubleshooting).
|
||||
|
||||
## Tool agen + cara kerja kontrol
|
||||
### Kegagalan startup CDP vs blokir SSRF navigasi
|
||||
|
||||
Agen mendapatkan **satu tool** untuk otomasi browser:
|
||||
Ini adalah kelas kegagalan yang berbeda dan masing-masing mengarah ke jalur kode yang berbeda.
|
||||
|
||||
- **Kegagalan startup atau kesiapan CDP** berarti OpenClaw tidak dapat memastikan bahwa control plane browser sehat.
|
||||
- **Blokir SSRF navigasi** berarti control plane browser sehat, tetapi target navigasi halaman ditolak oleh kebijakan.
|
||||
|
||||
Contoh umum:
|
||||
|
||||
- Kegagalan startup atau kesiapan CDP:
|
||||
- `Chrome CDP websocket for profile "openclaw" is not reachable after start`
|
||||
- `Remote CDP for profile "<name>" is not reachable at <cdpUrl>`
|
||||
- Blokir SSRF navigasi:
|
||||
- alur `open`, `navigate`, snapshot, atau pembukaan tab gagal dengan error kebijakan browser/jaringan sementara `start` dan `tabs` tetap berfungsi
|
||||
|
||||
Gunakan urutan minimal ini untuk membedakan keduanya:
|
||||
|
||||
```bash
|
||||
openclaw browser --browser-profile openclaw start
|
||||
openclaw browser --browser-profile openclaw tabs
|
||||
openclaw browser --browser-profile openclaw open https://example.com
|
||||
```
|
||||
|
||||
Cara membaca hasilnya:
|
||||
|
||||
- Jika `start` gagal dengan `not reachable after start`, pecahkan masalah kesiapan CDP terlebih dahulu.
|
||||
- Jika `start` berhasil tetapi `tabs` gagal, control plane masih tidak sehat. Perlakukan ini sebagai masalah keterjangkauan CDP, bukan masalah navigasi halaman.
|
||||
- Jika `start` dan `tabs` berhasil tetapi `open` atau `navigate` gagal, control plane browser aktif dan kegagalannya ada pada kebijakan navigasi atau halaman target.
|
||||
- Jika `start`, `tabs`, dan `open` semuanya berhasil, jalur kontrol browser terkelola dasar dalam kondisi sehat.
|
||||
|
||||
Detail perilaku penting:
|
||||
|
||||
- Konfigurasi browser secara default menggunakan objek kebijakan SSRF fail-closed bahkan ketika Anda tidak mengonfigurasi `browser.ssrfPolicy`.
|
||||
- Untuk profil terkelola `openclaw` loopback lokal, pemeriksaan kesehatan CDP sengaja melewati penegakan keterjangkauan SSRF browser untuk control plane lokal milik OpenClaw sendiri.
|
||||
- Perlindungan navigasi bersifat terpisah. Hasil `start` atau `tabs` yang berhasil tidak berarti target `open` atau `navigate` berikutnya diizinkan.
|
||||
|
||||
Panduan keamanan:
|
||||
|
||||
- **Jangan** melonggarkan kebijakan SSRF browser secara default.
|
||||
- Utamakan pengecualian host yang sempit seperti `hostnameAllowlist` atau `allowedHostnames` dibanding akses jaringan privat yang luas.
|
||||
- Gunakan `dangerouslyAllowPrivateNetwork: true` hanya di lingkungan yang memang tepercaya, saat akses browser ke jaringan privat diperlukan dan sudah ditinjau.
|
||||
|
||||
Contoh: navigasi diblokir, control plane sehat
|
||||
|
||||
- `start` berhasil
|
||||
- `tabs` berhasil
|
||||
- `open http://internal.example` gagal
|
||||
|
||||
Itu biasanya berarti startup browser baik-baik saja dan target navigasi perlu ditinjau kebijakannya.
|
||||
|
||||
Contoh: startup diblokir sebelum navigasi relevan
|
||||
|
||||
- `start` gagal dengan `not reachable after start`
|
||||
- `tabs` juga gagal atau tidak dapat dijalankan
|
||||
|
||||
Itu mengarah ke peluncuran browser atau keterjangkauan CDP, bukan masalah allowlist URL halaman.
|
||||
|
||||
## Alat agen + cara kontrol bekerja
|
||||
|
||||
Agen mendapatkan **satu alat** untuk otomatisasi browser:
|
||||
|
||||
- `browser` — status/start/stop/tabs/open/focus/close/snapshot/screenshot/navigate/act
|
||||
|
||||
Pemetaan kerjanya:
|
||||
|
||||
- `browser snapshot` mengembalikan tree UI yang stabil (AI atau ARIA).
|
||||
- `browser snapshot` mengembalikan pohon UI yang stabil (AI atau ARIA).
|
||||
- `browser act` menggunakan ID `ref` dari snapshot untuk klik/ketik/seret/pilih.
|
||||
- `browser screenshot` menangkap piksel (halaman penuh atau elemen).
|
||||
- `browser` menerima:
|
||||
- `profile` untuk memilih profil browser bernama (openclaw, chrome, atau CDP jarak jauh).
|
||||
- `target` (`sandbox` | `host` | `node`) untuk memilih lokasi browser.
|
||||
- Dalam sesi sandbox, `target: "host"` memerlukan `agents.defaults.sandbox.browser.allowHostControl=true`.
|
||||
- Jika `target` dihilangkan: sesi sandbox default ke `sandbox`, sesi non-sandbox default ke `host`.
|
||||
- Jika node yang mampu browser terhubung, tool dapat otomatis diarahkan ke sana kecuali Anda mengunci `target="host"` atau `target="node"`.
|
||||
- `target` (`sandbox` | `host` | `node`) untuk memilih lokasi browser berada.
|
||||
- Dalam sesi tersandbox, `target: "host"` memerlukan `agents.defaults.sandbox.browser.allowHostControl=true`.
|
||||
- Jika `target` dihilangkan: sesi tersandbox default ke `sandbox`, sesi non-sandbox default ke `host`.
|
||||
- Jika node yang mampu menjalankan browser terhubung, alat dapat otomatis diarahkan ke node tersebut kecuali Anda menetapkan `target="host"` atau `target="node"`.
|
||||
|
||||
Ini menjaga agen tetap deterministik dan menghindari selector yang rapuh.
|
||||
|
||||
## Terkait
|
||||
|
||||
- [Tools Overview](/id/tools) — semua tool agen yang tersedia
|
||||
- [Sandboxing](/id/gateway/sandboxing) — kontrol browser di lingkungan sandbox
|
||||
- [Security](/id/gateway/security) — risiko dan hardening kontrol browser
|
||||
- [Gambaran Umum Tools](/id/tools) — semua alat agen yang tersedia
|
||||
- [Sandboxing](/id/gateway/sandboxing) — kontrol browser di lingkungan tersandbox
|
||||
- [Keamanan](/id/gateway/security) — risiko dan penguatan kontrol browser
|
||||
|
||||
Loading…
Reference in New Issue
Block a user