chore(i18n): refresh id translations

This commit is contained in:
openclaw-docs-i18n[bot] 2026-04-23 13:59:45 +00:00
parent 021dbff758
commit 77077e68df
8 changed files with 748 additions and 613 deletions

View File

@ -1,107 +1,107 @@
---
read_when:
- Anda perlu memahami mengapa suatu job CI berjalan atau tidak berjalan
- Anda perlu memahami mengapa sebuah pekerjaan CI dijalankan atau tidak dijalankan
- Anda sedang men-debug pemeriksaan GitHub Actions yang gagal
summary: Grafik job CI, scope gate, dan padanan perintah lokal
summary: Graf pekerjaan CI, gerbang cakupan, dan padanan perintah lokal
title: Pipeline CI
x-i18n:
generated_at: "2026-04-23T09:17:46Z"
generated_at: "2026-04-23T13:58:13Z"
model: gpt-5.4
provider: openai
source_hash: 5c89c66204b203a39435cfc19de7b437867f2792bbfa2c3948371abde9f80e11
source_hash: c5a8ea0d8e428826169b0e6aced1caeb993106fe79904002125ace86b48cae1f
source_path: ci.md
workflow: 15
---
# Pipeline CI
CI berjalan pada setiap push ke `main` dan setiap pull request. CI menggunakan scope cerdas untuk melewati job mahal saat hanya area yang tidak terkait yang berubah.
CI berjalan pada setiap push ke `main` dan setiap pull request. CI menggunakan pembatasan cakupan cerdas untuk melewati pekerjaan yang mahal saat hanya area yang tidak terkait yang berubah.
QA Lab memiliki lane CI khusus di luar workflow utama yang memakai scope cerdas. Workflow
QA Lab memiliki lane CI khusus di luar workflow utama yang dibatasi cakupan secara cerdas. Workflow
`Parity gate` berjalan pada perubahan PR yang cocok dan manual dispatch; workflow ini
membangun runtime QA privat dan membandingkan pack agentic mock GPT-5.4 dan Opus 4.6.
membangun runtime QA privat dan membandingkan paket agentic mock GPT-5.4 dan Opus 4.6.
Workflow `QA-Lab - All Lanes` berjalan setiap malam di `main` dan pada
manual dispatch; workflow ini memecah mock parity gate, lane Matrix live, dan lane
Telegram live menjadi job paralel. Job live menggunakan environment `qa-live-shared`,
manual dispatch; workflow ini menyebarkan parity gate mock, lane Matrix live, dan lane
Telegram live sebagai pekerjaan paralel. Pekerjaan live menggunakan environment `qa-live-shared`,
dan lane Telegram menggunakan lease Convex. `OpenClaw Release
Checks` juga menjalankan lane QA Lab yang sama sebelum persetujuan rilis.
## Ringkasan Job
## Ringkasan Pekerjaan
| Job | Tujuan | Kapan berjalan |
| -------------------------------- | -------------------------------------------------------------------------------------------- | ------------------------------------ |
| `preflight` | Mendeteksi perubahan docs-only, scope yang berubah, extension yang berubah, dan membangun manifest CI | Selalu pada push dan PR non-draft |
| `security-scm-fast` | Deteksi private key dan audit workflow melalui `zizmor` | Selalu pada push dan PR non-draft |
| `security-dependency-audit` | Audit lockfile produksi tanpa dependensi terhadap advisory npm | Selalu pada push dan PR non-draft |
| `security-fast` | Agregat wajib untuk job keamanan cepat | Selalu pada push dan PR non-draft |
| `build-artifacts` | Membangun `dist/`, UI Control, pemeriksaan built-artifact, dan artifact downstream yang dapat digunakan kembali | Perubahan yang relevan dengan Node |
| `checks-fast-core` | Lane korektness Linux cepat seperti pemeriksaan bundled/plugin-contract/protocol | Perubahan yang relevan dengan Node |
| `checks-fast-contracts-channels` | Pemeriksaan kontrak channel yang di-shard dengan hasil pemeriksaan agregat yang stabil | Perubahan yang relevan dengan Node |
| `checks-node-extensions` | Shard pengujian penuh plugin bawaan di seluruh suite extension | Perubahan yang relevan dengan Node |
| `checks-node-core-test` | Shard pengujian core Node, tidak termasuk lane channel, bundled, kontrak, dan extension | Perubahan yang relevan dengan Node |
| `extension-fast` | Pengujian terfokus hanya untuk plugin bawaan yang berubah | Pull request dengan perubahan extension |
| `check` | Padanan local gate utama yang di-shard: prod types, lint, guard, test types, dan smoke ketat | Perubahan yang relevan dengan Node |
| `check-additional` | Guard arsitektur, boundary, extension-surface, package-boundary, dan shard gateway-watch | Perubahan yang relevan dengan Node |
| `build-smoke` | Pengujian smoke CLI hasil build dan smoke memori saat startup | Perubahan yang relevan dengan Node |
| `checks` | Verifier untuk pengujian channel built-artifact plus kompatibilitas Node 22 khusus push | Perubahan yang relevan dengan Node |
| `check-docs` | Pemformatan docs, lint, dan pemeriksaan broken-link | Docs berubah |
| Pekerjaan | Tujuan | Kapan dijalankan |
| -------------------------------- | -------------------------------------------------------------------------------------------- | ----------------------------------- |
| `preflight` | Mendeteksi perubahan docs-only, cakupan yang berubah, extension yang berubah, dan membangun manifes CI | Selalu pada push dan PR non-draft |
| `security-scm-fast` | Deteksi kunci privat dan audit workflow melalui `zizmor` | Selalu pada push dan PR non-draft |
| `security-dependency-audit` | Audit lockfile produksi bebas dependensi terhadap advisory npm | Selalu pada push dan PR non-draft |
| `security-fast` | Agregat wajib untuk pekerjaan keamanan cepat | Selalu pada push dan PR non-draft |
| `build-artifacts` | Membangun `dist/`, Control UI, pemeriksaan built-artifact, dan artifact downstream yang dapat digunakan ulang | Perubahan yang relevan dengan Node |
| `checks-fast-core` | Lane korektness Linux cepat seperti pemeriksaan bundled/plugin-contract/protocol | Perubahan yang relevan dengan Node |
| `checks-fast-contracts-channels` | Pemeriksaan kontrak channel yang di-shard dengan hasil pemeriksaan agregat yang stabil | Perubahan yang relevan dengan Node |
| `checks-node-extensions` | Shard pengujian bundled-plugin penuh di seluruh suite extension | Perubahan yang relevan dengan Node |
| `checks-node-core-test` | Shard pengujian Node inti, tidak termasuk lane channel, bundled, contract, dan extension | Perubahan yang relevan dengan Node |
| `extension-fast` | Pengujian terfokus hanya untuk bundled plugin yang berubah | Pull request dengan perubahan extension |
| `check` | Padanan gerbang lokal utama yang di-shard: tipe prod, lint, guard, tipe test, dan smoke ketat | Perubahan yang relevan dengan Node |
| `check-additional` | Guard arsitektur, boundary, permukaan extension, package-boundary, dan shard gateway-watch | Perubahan yang relevan dengan Node |
| `build-smoke` | Pengujian smoke CLI hasil build dan smoke memori startup | Perubahan yang relevan dengan Node |
| `checks` | Verifier untuk pengujian channel built-artifact ditambah kompatibilitas Node 22 khusus push | Perubahan yang relevan dengan Node |
| `check-docs` | Pemeriksaan format docs, lint, dan tautan rusak | Docs berubah |
| `skills-python` | Ruff + pytest untuk Skills berbasis Python | Perubahan yang relevan dengan Python skill |
| `checks-windows` | Lane pengujian khusus Windows | Perubahan yang relevan dengan Windows |
| `macos-node` | Lane pengujian TypeScript macOS menggunakan built artifact bersama | Perubahan yang relevan dengan macOS |
| `macos-swift` | Lint, build, dan pengujian Swift untuk aplikasi macOS | Perubahan yang relevan dengan macOS |
| `android` | Pengujian unit Android untuk kedua flavor plus satu build APK debug | Perubahan yang relevan dengan Android |
| `macos-node` | Lane pengujian TypeScript macOS menggunakan built artifact bersama | Perubahan yang relevan dengan macOS |
| `macos-swift` | Lint, build, dan pengujian Swift untuk aplikasi macOS | Perubahan yang relevan dengan macOS |
| `android` | Pengujian unit Android untuk kedua flavor ditambah satu build APK debug | Perubahan yang relevan dengan Android |
## Urutan Fail-Fast
## Urutan Gagal Cepat
Job diurutkan agar pemeriksaan murah gagal sebelum job yang mahal berjalan:
Pekerjaan diurutkan agar pemeriksaan murah gagal sebelum pekerjaan mahal berjalan:
1. `preflight` memutuskan lane mana yang ada sama sekali. Logika `docs-scope` dan `changed-scope` adalah langkah di dalam job ini, bukan job terpisah.
2. `security-scm-fast`, `security-dependency-audit`, `security-fast`, `check`, `check-additional`, `check-docs`, dan `skills-python` gagal cepat tanpa menunggu job artifact dan matriks platform yang lebih berat.
1. `preflight` memutuskan lane mana yang ada. Logika `docs-scope` dan `changed-scope` adalah step di dalam pekerjaan ini, bukan pekerjaan terpisah.
2. `security-scm-fast`, `security-dependency-audit`, `security-fast`, `check`, `check-additional`, `check-docs`, dan `skills-python` gagal cepat tanpa menunggu pekerjaan artifact dan matriks platform yang lebih berat.
3. `build-artifacts` berjalan tumpang tindih dengan lane Linux cepat agar konsumen downstream dapat mulai segera setelah build bersama siap.
4. Lane platform dan runtime yang lebih berat lalu berjalan paralel setelah itu: `checks-fast-core`, `checks-fast-contracts-channels`, `checks-node-extensions`, `checks-node-core-test`, `extension-fast` khusus PR, `checks`, `checks-windows`, `macos-node`, `macos-swift`, dan `android`.
4. Setelah itu, lane platform dan runtime yang lebih berat menyebar: `checks-fast-core`, `checks-fast-contracts-channels`, `checks-node-extensions`, `checks-node-core-test`, `extension-fast` khusus PR, `checks`, `checks-windows`, `macos-node`, `macos-swift`, dan `android`.
Logika scope berada di `scripts/ci-changed-scope.mjs` dan dicakup oleh unit test di `src/scripts/ci-changed-scope.test.ts`.
Edit workflow CI memvalidasi grafik CI Node plus lint workflow, tetapi tidak dengan sendirinya memaksa build native Windows, Android, atau macOS; lane platform tersebut tetap dibatasi pada perubahan source platform.
Pemeriksaan Node Windows dibatasi pada wrapper proses/path khusus Windows, helper runner npm/pnpm/UI, konfigurasi package manager, dan surface workflow CI yang menjalankan lane tersebut; perubahan source, plugin, install-smoke, dan test-only yang tidak terkait tetap berada di lane Linux Node agar tidak memesan worker Windows 16-vCPU untuk cakupan yang sudah dijalankan oleh shard test normal.
Workflow `install-smoke` yang terpisah menggunakan ulang skrip scope yang sama melalui job `preflight` miliknya sendiri. Workflow ini menghitung `run_install_smoke` dari sinyal changed-smoke yang lebih sempit, sehingga smoke Docker/install berjalan untuk perubahan terkait install, packaging, container, perubahan produksi bundled extension, dan surface core plugin/channel/Gateway/Plugin SDK yang diuji oleh job smoke Docker. Edit test-only dan docs-only tidak memesan worker Docker. Smoke paket QR memaksa layer Docker `pnpm install` dijalankan ulang sambil mempertahankan cache BuildKit pnpm store, sehingga tetap menguji instalasi tanpa mengunduh ulang dependensi pada setiap run. Gateway-network e2e menggunakan ulang image runtime yang dibangun sebelumnya dalam job tersebut, sehingga menambahkan cakupan WebSocket container-ke-container yang nyata tanpa menambahkan build Docker lain. `test:docker:all` lokal membangun lebih dahulu satu image built-app bersama dari `scripts/e2e/Dockerfile` dan menggunakannya kembali di runner smoke container E2E; workflow live/E2E yang dapat digunakan ulang meniru pola itu dengan membangun dan mendorong satu image E2E Docker GHCR bertag SHA sebelum matriks Docker, lalu menjalankan matriks dengan `OPENCLAW_SKIP_DOCKER_BUILD=1`. Pengujian Docker QR dan installer mempertahankan Dockerfile mereka sendiri yang berfokus pada instalasi. Job `docker-e2e-fast` yang terpisah menjalankan profil Docker bundled-plugin terbatas di bawah timeout perintah 120 detik: perbaikan dependensi setup-entry plus isolasi kegagalan bundled-loader sintetis. Matriks update/channel bundled penuh tetap manual/full-suite karena melakukan update npm nyata berulang dan doctor repair pass.
Logika cakupan berada di `scripts/ci-changed-scope.mjs` dan dicakup oleh pengujian unit di `src/scripts/ci-changed-scope.test.ts`.
Edit workflow CI memvalidasi grafik CI Node beserta workflow linting, tetapi tidak memaksa build native Windows, Android, atau macOS dengan sendirinya; lane platform tersebut tetap dibatasi pada perubahan source platform.
Pemeriksaan Node Windows dibatasi pada wrapper proses/path khusus Windows, helper runner npm/pnpm/UI, konfigurasi package manager, dan permukaan workflow CI yang mengeksekusi lane tersebut; perubahan source, plugin, install-smoke, dan test-only yang tidak terkait tetap berada di lane Node Linux agar tidak memesan worker Windows 16-vCPU untuk cakupan yang sudah diuji oleh shard pengujian normal.
Workflow `install-smoke` yang terpisah menggunakan kembali skrip cakupan yang sama melalui pekerjaan `preflight` miliknya sendiri. Workflow ini menghitung `run_install_smoke` dari sinyal changed-smoke yang lebih sempit, sehingga smoke Docker/install berjalan untuk perubahan install, packaging, yang relevan dengan container, perubahan produksi bundled extension, dan permukaan inti plugin/channel/gateway/Plugin SDK yang dijalankan oleh pekerjaan smoke Docker. Edit test-only dan docs-only tidak memesan worker Docker. Smoke paket QR memaksa layer Docker `pnpm install` untuk dijalankan ulang sambil mempertahankan cache BuildKit pnpm store, sehingga tetap menguji instalasi tanpa mengunduh ulang dependensi pada setiap run. E2E gateway-network menggunakan kembali image runtime yang dibangun sebelumnya dalam pekerjaan, sehingga menambahkan cakupan WebSocket antarkontainer nyata tanpa menambahkan build Docker lain. `test:docker:all` lokal melakukan prebuild satu image live-test bersama dan satu image built-app bersama `scripts/e2e/Dockerfile`, lalu menjalankan lane smoke live/E2E secara paralel dengan `OPENCLAW_SKIP_DOCKER_BUILD=1`; sesuaikan konkurensi default 4 dengan `OPENCLAW_DOCKER_ALL_PARALLELISM`. Agregat lokal berhenti menjadwalkan lane gabungan baru setelah kegagalan pertama secara default, dan tiap lane memiliki timeout 120 menit yang dapat dioverride dengan `OPENCLAW_DOCKER_ALL_LANE_TIMEOUT_MS`. Lane yang sensitif terhadap startup atau provider berjalan secara eksklusif setelah pool paralel. Workflow live/E2E reusable mencerminkan pola image bersama dengan membangun dan mendorong satu image Docker E2E GHCR bertag SHA sebelum matriks Docker, lalu menjalankan matriks dengan `OPENCLAW_SKIP_DOCKER_BUILD=1`. Workflow live/E2E terjadwal menjalankan suite Docker jalur-rilis penuh setiap hari. Pengujian Docker QR dan installer mempertahankan Dockerfile mereka sendiri yang berfokus pada instalasi. Pekerjaan `docker-e2e-fast` terpisah menjalankan profil Docker bundled-plugin yang dibatasi di bawah timeout perintah 120 detik: perbaikan dependensi setup-entry ditambah isolasi kegagalan bundled-loader sintetis. Matriks pembaruan/channel bundled penuh tetap manual/full-suite karena menjalankan pass update npm nyata dan doctor repair berulang.
Logika changed-lane lokal berada di `scripts/changed-lanes.mjs` dan dijalankan oleh `scripts/check-changed.mjs`. Local gate itu lebih ketat soal boundary arsitektur dibanding scope platform CI yang luas: perubahan produksi core menjalankan typecheck prod core plus pengujian core, perubahan hanya pada pengujian core hanya menjalankan typecheck/pengujian core test, perubahan produksi extension menjalankan typecheck prod extension plus pengujian extension, dan perubahan hanya pada pengujian extension hanya menjalankan typecheck/pengujian extension test. Perubahan public Plugin SDK atau plugin-contract diperluas ke validasi extension karena extension bergantung pada kontrak core tersebut. Version bump yang hanya metadata rilis menjalankan pemeriksaan versi/konfigurasi/dependensi root yang terarah. Perubahan root/konfigurasi yang tidak dikenal fail safe ke semua lane.
Logika changed-lane lokal berada di `scripts/changed-lanes.mjs` dan dieksekusi oleh `scripts/check-changed.mjs`. Gerbang lokal ini lebih ketat terhadap boundary arsitektur daripada cakupan platform CI yang lebih luas: perubahan produksi inti menjalankan typecheck prod inti ditambah pengujian inti, perubahan test-only inti hanya menjalankan typecheck/pengujian test inti, perubahan produksi extension menjalankan typecheck prod extension ditambah pengujian extension, dan perubahan test-only extension hanya menjalankan typecheck/pengujian test extension. Perubahan pada Plugin SDK publik atau plugin-contract diperluas ke validasi extension karena extension bergantung pada kontrak inti tersebut. Version bump yang hanya mengubah metadata rilis menjalankan pemeriksaan versi/konfigurasi/dependensi root yang terarah. Perubahan root/konfigurasi yang tidak dikenal gagal aman ke semua lane.
Pada push, matriks `checks` menambahkan lane `compat-node22` khusus push. Pada pull request, lane itu dilewati dan matriks tetap berfokus pada lane pengujian/channel normal.
Pada push, matriks `checks` menambahkan lane `compat-node22` yang khusus push. Pada pull request, lane tersebut dilewati dan matriks tetap berfokus pada lane pengujian/channel normal.
Keluarga pengujian Node paling lambat dipecah atau diseimbangkan agar setiap job tetap kecil: kontrak channel membagi cakupan registry dan core menjadi total enam shard berbobot, pengujian plugin bawaan diseimbangkan di enam worker extension, auto-reply berjalan sebagai tiga worker seimbang alih-alih enam worker kecil, dan konfigurasi agentic Gateway/plugin disebar ke job Node agentic source-only yang sudah ada alih-alih menunggu built artifact. Pengujian browser, QA, media, dan plugin miscellanous yang luas menggunakan konfigurasi Vitest khusus mereka alih-alih catch-all plugin bersama. Lane agents yang luas menggunakan scheduler file-parallel Vitest bersama karena didominasi import/penjadwalan, bukan dimiliki oleh satu file test lambat. `runtime-config` berjalan dengan shard core-runtime infra agar shard runtime bersama tidak menjadi ekor. `check-additional` menyatukan pekerjaan compile/canary package-boundary dan memisahkan arsitektur topologi runtime dari cakupan gateway watch; shard boundary guard menjalankan guard kecil independennya secara paralel di dalam satu job. Gateway watch, pengujian channel, dan shard core support-boundary berjalan paralel di dalam `build-artifacts` setelah `dist/` dan `dist-runtime/` sudah dibangun, mempertahankan nama check lama mereka sebagai job verifier ringan sambil menghindari dua worker Blacksmith tambahan dan antrean konsumen artifact kedua.
Android CI menjalankan `testPlayDebugUnitTest` dan `testThirdPartyDebugUnitTest`, lalu membangun APK debug Play. Flavor third-party tidak memiliki source set atau manifest terpisah; lane unit-test-nya tetap mengompilasi flavor itu dengan flag BuildConfig SMS/call-log, sambil menghindari job packaging APK debug duplikat pada setiap push yang relevan dengan Android.
`extension-fast` khusus PR karena push run sudah menjalankan shard plugin bawaan penuh. Ini menjaga umpan balik plugin yang berubah untuk review tanpa memesan worker Blacksmith tambahan di `main` untuk cakupan yang sudah ada di `checks-node-extensions`.
Keluarga pengujian Node yang paling lambat dibagi atau diseimbangkan agar setiap pekerjaan tetap kecil: kontrak channel membagi cakupan registry dan inti menjadi total enam shard berbobot, pengujian bundled plugin diseimbangkan di enam worker extension, auto-reply berjalan sebagai tiga worker seimbang alih-alih enam worker kecil, dan konfigurasi gateway/plugin agentic disebar ke pekerjaan Node agentic source-only yang sudah ada alih-alih menunggu built artifact. Pengujian plugin browser luas, QA, media, dan miscellaneous menggunakan konfigurasi Vitest khusus mereka alih-alih plugin catch-all bersama. Lane agents yang luas menggunakan penjadwal file-paralel Vitest bersama karena didominasi import/penjadwalan alih-alih dimiliki satu file pengujian lambat. `runtime-config` berjalan dengan shard infra core-runtime agar shard runtime bersama tidak memegang ekor terlama. `check-additional` menjaga pekerjaan compile/canary package-boundary tetap bersama dan memisahkan arsitektur topologi runtime dari cakupan gateway watch; shard boundary guard menjalankan guard kecil independennya secara serentak di dalam satu pekerjaan. Gateway watch, pengujian channel, dan shard core support-boundary berjalan serentak di dalam `build-artifacts` setelah `dist/` dan `dist-runtime/` sudah dibangun, mempertahankan nama pemeriksaan lama mereka sebagai pekerjaan verifier ringan sambil menghindari dua worker Blacksmith tambahan dan antrean konsumen artifact kedua.
CI Android menjalankan `testPlayDebugUnitTest` dan `testThirdPartyDebugUnitTest`, lalu membangun APK debug Play. Flavor pihak ketiga tidak memiliki source set atau manifest terpisah; lane pengujian unitnya tetap mengompilasi flavor tersebut dengan flag BuildConfig SMS/call-log, sambil menghindari pekerjaan packaging APK debug duplikat pada setiap push yang relevan dengan Android.
`extension-fast` khusus PR karena push run sudah mengeksekusi shard bundled plugin penuh. Ini menjaga umpan balik changed-plugin untuk review tanpa memesan worker Blacksmith tambahan di `main` untuk cakupan yang sudah ada di `checks-node-extensions`.
GitHub dapat menandai job yang digantikan sebagai `cancelled` ketika push yang lebih baru masuk pada PR atau ref `main` yang sama. Perlakukan itu sebagai noise CI kecuali run terbaru untuk ref yang sama juga gagal. Pemeriksaan agregat shard menggunakan `!cancelled() && always()` sehingga tetap melaporkan kegagalan shard normal tetapi tidak masuk antrean setelah seluruh workflow sudah digantikan.
GitHub dapat menandai pekerjaan yang disupersede sebagai `cancelled` saat push yang lebih baru masuk pada PR atau ref `main` yang sama. Perlakukan itu sebagai noise CI kecuali run terbaru untuk ref yang sama juga gagal. Pemeriksaan agregat shard menggunakan `!cancelled() && always()` sehingga tetap melaporkan kegagalan shard normal tetapi tidak mengantre setelah seluruh workflow sudah disupersede.
Kunci konkurensi CI diberi versi (`CI-v7-*`) sehingga zombie sisi GitHub dalam grup antrean lama tidak dapat memblokir run main yang lebih baru tanpa batas.
## Runner
| Runner | Job |
| -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `ubuntu-24.04` | `preflight`, job keamanan cepat dan agregatnya (`security-scm-fast`, `security-dependency-audit`, `security-fast`), pemeriksaan cepat protocol/contract/bundled, pemeriksaan kontrak channel yang di-shard, shard `check` kecuali lint, shard dan agregat `check-additional`, verifier agregat test Node, pemeriksaan docs, Python Skills, workflow-sanity, labeler, auto-response; preflight install-smoke juga menggunakan Ubuntu yang di-host GitHub agar matriks Blacksmith dapat mengantre lebih awal |
| `blacksmith-8vcpu-ubuntu-2404` | `build-artifacts`, build-smoke, shard test Linux Node, shard test plugin bawaan, `android` |
| `blacksmith-16vcpu-ubuntu-2404` | `check-lint`, yang tetap cukup sensitif terhadap CPU sehingga 8 vCPU justru lebih mahal daripada penghematannya; build Docker install-smoke, tempat biaya waktu antrean 32-vCPU lebih besar daripada penghematannya |
| `blacksmith-16vcpu-windows-2025` | `checks-windows` |
| `blacksmith-6vcpu-macos-latest` | `macos-node` di `openclaw/openclaw`; fork fallback ke `macos-latest` |
| `blacksmith-12vcpu-macos-latest` | `macos-swift` di `openclaw/openclaw`; fork fallback ke `macos-latest` |
| Runner | Pekerjaan |
| -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `ubuntu-24.04` | `preflight`, pekerjaan dan agregat keamanan cepat (`security-scm-fast`, `security-dependency-audit`, `security-fast`), pemeriksaan protocol/contract/bundled cepat, pemeriksaan kontrak channel yang di-shard, shard `check` kecuali lint, shard dan agregat `check-additional`, verifier agregat pengujian Node, pemeriksaan docs, Skills Python, workflow-sanity, labeler, auto-response; preflight install-smoke juga menggunakan Ubuntu yang di-host GitHub agar matriks Blacksmith dapat mengantre lebih awal |
| `blacksmith-8vcpu-ubuntu-2404` | `build-artifacts`, build-smoke, shard pengujian Node Linux, shard pengujian bundled plugin, `android` |
| `blacksmith-16vcpu-ubuntu-2404` | `check-lint`, yang tetap cukup sensitif terhadap CPU sehingga 8 vCPU justru lebih mahal daripada penghematannya; build Docker install-smoke, di mana waktu antre 32-vCPU lebih mahal daripada penghematannya |
| `blacksmith-16vcpu-windows-2025` | `checks-windows` |
| `blacksmith-6vcpu-macos-latest` | `macos-node` pada `openclaw/openclaw`; fork menggunakan fallback ke `macos-latest` |
| `blacksmith-12vcpu-macos-latest` | `macos-swift` pada `openclaw/openclaw`; fork menggunakan fallback ke `macos-latest` |
## Padanan Lokal
```bash
pnpm changed:lanes # periksa classifier changed-lane lokal untuk origin/main...HEAD
pnpm check:changed # local gate cerdas: typecheck/lint/test yang berubah berdasarkan boundary lane
pnpm check # local gate cepat: tsgo produksi + lint yang di-shard + fast guard paralel
pnpm check:changed # gerbang lokal cerdas: typecheck/lint/pengujian yang berubah menurut lane boundary
pnpm check # gerbang lokal cepat: tsgo produksi + lint yang di-shard + guard cepat paralel
pnpm check:test-types
pnpm check:timed # gate yang sama dengan timing per tahap
pnpm check:timed # gerbang yang sama dengan timing per tahap
pnpm build:strict-smoke
pnpm check:architecture
pnpm test:gateway:watch-regression
pnpm test # pengujian vitest
pnpm test:channels
pnpm test:contracts:channels
pnpm check:docs # format docs + lint + broken link
pnpm build # build dist saat lane artifact/build-smoke CI relevan
node scripts/ci-run-timings.mjs <run-id> # rangkum wall time, waktu antrean, dan job paling lambat
pnpm check:docs # format docs + lint + tautan rusak
pnpm build # build dist saat lane CI artifact/build-smoke relevan
node scripts/ci-run-timings.mjs <run-id> # ringkas wall time, queue time, dan pekerjaan paling lambat
```

View File

@ -1,21 +1,21 @@
---
read_when:
- Anda ingin diagnosis cepat tentang kesehatan saluran + penerima sesi terbaru
- Anda menginginkan status “all” yang bisa ditempel untuk debugging
- Anda ingin diagnosis cepat tentang kesehatan channel + penerima sesi terbaru
- Anda menginginkan status “all” yang bisa langsung ditempel untuk debugging
summary: Referensi CLI untuk `openclaw status` (diagnostik, probe, snapshot penggunaan)
title: status
x-i18n:
generated_at: "2026-04-05T13:49:59Z"
generated_at: "2026-04-23T13:58:18Z"
model: gpt-5.4
provider: openai
source_hash: fbe9d94fbe9938cd946ee6f293b5bd3b464b75e1ade2eacdd851788c3bffe94e
source_hash: 015614e329ec172a62c625581897fa64589f12dfe28edefe8a2764b5b5367b2a
source_path: cli/status.md
workflow: 15
---
# `openclaw status`
Diagnostik untuk saluran + sesi.
Diagnostik untuk channel + sesi.
```bash
openclaw status
@ -27,16 +27,17 @@ openclaw status --usage
Catatan:
- `--deep` menjalankan probe langsung (WhatsApp Web + Telegram + Discord + Slack + Signal).
- `--usage` mencetak jendela penggunaan provider yang dinormalisasi sebagai `X% left`.
- Field mentah `usage_percent` / `usagePercent` milik MiniMax adalah kuota tersisa, jadi OpenClaw membalikkannya sebelum ditampilkan; field berbasis hitungan diprioritaskan saat tersedia. Respons `model_remains` memprioritaskan entri model chat, menurunkan label jendela dari timestamp saat diperlukan, dan menyertakan nama model dalam label paket.
- Saat snapshot sesi saat ini jarang terisi, `/status` dapat mengisi balik penghitung token dan cache dari log penggunaan transkrip terbaru. Nilai langsung nonzero yang sudah ada tetap diprioritaskan dibanding nilai fallback transkrip.
- Fallback transkrip juga dapat memulihkan label model runtime aktif saat entri sesi langsung tidak memilikinya. Jika model transkrip tersebut berbeda dari model yang dipilih, status menyelesaikan context window terhadap model runtime yang dipulihkan, bukan model yang dipilih.
- Untuk perhitungan ukuran prompt, fallback transkrip memprioritaskan total berorientasi prompt yang lebih besar saat metadata sesi tidak ada atau lebih kecil, sehingga sesi custom-provider tidak turun menjadi tampilan token `0`.
- Output mencakup penyimpanan sesi per agen saat beberapa agen dikonfigurasi.
- Ringkasan mencakup status instalasi/runtime layanan host Gateway + node saat tersedia.
- Ringkasan mencakup saluran pembaruan + git SHA (untuk checkout source).
- Info pembaruan muncul di Ringkasan; jika pembaruan tersedia, status mencetak petunjuk untuk menjalankan `openclaw update` (lihat [Memperbarui](/install/updating)).
- Permukaan status read-only (`status`, `status --json`, `status --all`) menyelesaikan SecretRef yang didukung untuk jalur config targetnya bila memungkinkan.
- Jika SecretRef saluran yang didukung dikonfigurasi tetapi tidak tersedia dalam jalur perintah saat ini, status tetap read-only dan melaporkan output terdegradasi alih-alih crash. Output untuk manusia menampilkan peringatan seperti “configured token unavailable in this command path”, dan output JSON mencakup `secretDiagnostics`.
- Saat penyelesaian SecretRef lokal-perintah berhasil, status memprioritaskan snapshot yang telah diselesaikan dan menghapus penanda saluran “secret unavailable” sementara dari output akhir.
- `status --all` mencakup baris ringkasan Secrets dan bagian diagnosis yang merangkum diagnostik secret (dipotong agar mudah dibaca) tanpa menghentikan pembuatan laporan.
- `--usage` mencetak jendela penggunaan provider yang dinormalisasi sebagai `X% tersisa`.
- Output status sesi kini memisahkan `Runtime:` dari `Runner:`. `Runtime` adalah jalur eksekusi dan status sandbox (`direct`, `docker/*`), sedangkan `Runner` memberi tahu apakah sesi menggunakan Pi tersemat, provider berbasis CLI, atau backend harness ACP seperti `codex (acp/acpx)`.
- Field mentah `usage_percent` / `usagePercent` milik MiniMax adalah kuota yang tersisa, jadi OpenClaw membalikkannya sebelum ditampilkan; field berbasis hitungan diprioritaskan jika tersedia. Respons `model_remains` memprioritaskan entri chat-model, menurunkan label jendela dari timestamp bila diperlukan, dan menyertakan nama model dalam label paket.
- Saat snapshot sesi saat ini minim data, `/status` dapat mengisi ulang penghitung token dan cache dari log penggunaan transkrip terbaru. Nilai live nonzero yang sudah ada tetap diprioritaskan dibanding nilai fallback transkrip.
- Fallback transkrip juga dapat memulihkan label model runtime aktif saat entri sesi live tidak memilikinya. Jika model transkrip itu berbeda dari model yang dipilih, status menyelesaikan context window terhadap model runtime yang dipulihkan, bukan model yang dipilih.
- Untuk penghitungan ukuran prompt, fallback transkrip memprioritaskan total berorientasi prompt yang lebih besar saat metadata sesi tidak ada atau lebih kecil, sehingga sesi custom-provider tidak turun menjadi tampilan token `0`.
- Output menyertakan penyimpanan sesi per-agent saat beberapa agent dikonfigurasi.
- Ringkasan mencakup status instalasi/runtime layanan host Gateway + node jika tersedia.
- Ringkasan mencakup channel pembaruan + SHA git (untuk checkout source).
- Info pembaruan ditampilkan di Ringkasan; jika pembaruan tersedia, status mencetak petunjuk untuk menjalankan `openclaw update` (lihat [Memperbarui](/id/install/updating)).
- Permukaan status read-only (`status`, `status --json`, `status --all`) menyelesaikan SecretRef yang didukung untuk path config targetnya bila memungkinkan.
- Jika SecretRef channel yang didukung dikonfigurasi tetapi tidak tersedia pada jalur perintah saat ini, status tetap read-only dan melaporkan output yang menurun alih-alih crash. Output untuk manusia menampilkan peringatan seperti “configured token unavailable in this command path”, dan output JSON menyertakan `secretDiagnostics`.
- Saat penyelesaian SecretRef lokal-perintah berhasil, status memprioritaskan snapshot yang telah diselesaikan dan menghapus penanda channel sementara “secret unavailable” dari output akhir.
- `status --all` menyertakan baris ringkasan Secrets dan bagian diagnosis yang merangkum diagnostik secret (dipotong untuk keterbacaan) tanpa menghentikan pembuatan laporan.

View File

@ -1,61 +1,61 @@
---
read_when:
- Anda ingin menggunakan model OpenAI di OpenClaw
- Anda menginginkan auth langganan Codex alih-alih API key
- Anda memerlukan perilaku eksekusi agent GPT-5 yang lebih ketat
summary: Gunakan OpenAI melalui API key atau langganan Codex di OpenClaw
- Anda ingin autentikasi langganan Codex alih-alih kunci API
- Anda memerlukan perilaku eksekusi agen GPT-5 yang lebih ketat
summary: Gunakan OpenAI melalui kunci API atau langganan Codex di OpenClaw
title: OpenAI
x-i18n:
generated_at: "2026-04-23T09:27:15Z"
generated_at: "2026-04-23T13:58:15Z"
model: gpt-5.4
provider: openai
source_hash: c3d847e53c2faee5363071dfdcb1f4150b64577674161e000844f579482198d1
source_hash: ac42660234e1971440f6de3b04adb1d3a1fddca20219fb68936c36e4c2f95265
source_path: providers/openai.md
workflow: 15
---
# OpenAI
OpenAI menyediakan API pengembang untuk model GPT. OpenClaw mendukung dua jalur auth:
OpenAI menyediakan API developer untuk model GPT. OpenClaw mendukung dua jalur autentikasi:
- **API key** — akses OpenAI Platform langsung dengan penagihan berbasis penggunaan (model `openai/*`)
- **Langganan Codex**login ChatGPT/Codex dengan akses langganan (model `openai-codex/*`)
- **Kunci API** — akses langsung ke OpenAI Platform dengan penagihan berbasis penggunaan (model `openai/*`)
- **Langganan Codex**masuk ChatGPT/Codex dengan akses langganan (model `openai-codex/*`)
OpenAI secara eksplisit mendukung penggunaan OAuth langganan dalam tool eksternal dan alur kerja seperti OpenClaw.
OpenAI secara eksplisit mendukung penggunaan OAuth langganan di alat dan alur kerja eksternal seperti OpenClaw.
## Cakupan fitur OpenClaw
| Kapabilitas OpenAI | Permukaan OpenClaw | Status |
| ------------------------ | ----------------------------------------- | ------------------------------------------------------ |
| Chat / Responses | provider model `openai/<model>` | Ya |
| Model langganan Codex | provider model `openai-codex/<model>` | Ya |
| Pencarian web sisi server| Tool OpenAI Responses native | Ya, saat pencarian web diaktifkan dan tidak ada provider yang disematkan |
| Gambar | `image_generate` | Ya |
| Video | `video_generate` | Ya |
| Text-to-speech | `messages.tts.provider: "openai"` / `tts` | Ya |
| Batch speech-to-text | `tools.media.audio` / pemahaman media | Ya |
| Streaming speech-to-text | Voice Call `streaming.provider: "openai"` | Ya |
| Suara realtime | Voice Call `realtime.provider: "openai"` | Ya |
| Embedding | provider embedding memori | Ya |
| Kemampuan OpenAI | Permukaan OpenClaw | Status |
| ------------------------- | ----------------------------------------- | ------------------------------------------------------- |
| Chat / Responses | penyedia model `openai/<model>` | Ya |
| Model langganan Codex | penyedia model `openai-codex/<model>` | Ya |
| Pencarian web sisi server | alat Native OpenAI Responses | Ya, saat pencarian web diaktifkan dan tidak ada penyedia yang dipatok |
| Gambar | `image_generate` | Ya |
| Video | `video_generate` | Ya |
| Text-to-speech | `messages.tts.provider: "openai"` / `tts` | Ya |
| Speech-to-text batch | `tools.media.audio` / pemahaman media | Ya |
| Streaming speech-to-text | Voice Call `streaming.provider: "openai"` | Ya |
| Suara realtime | Voice Call `realtime.provider: "openai"` | Ya |
| Embeddings | penyedia embedding memori | Ya |
## Mulai
## Memulai
Pilih metode auth pilihan Anda dan ikuti langkah penyiapannya.
Pilih metode autentikasi yang Anda inginkan dan ikuti langkah-langkah penyiapannya.
<Tabs>
<Tab title="API key (OpenAI Platform)">
<Tab title="Kunci API (OpenAI Platform)">
**Terbaik untuk:** akses API langsung dan penagihan berbasis penggunaan.
<Steps>
<Step title="Dapatkan API key Anda">
Buat atau salin API key dari [dashboard OpenAI Platform](https://platform.openai.com/api-keys).
<Step title="Dapatkan kunci API Anda">
Buat atau salin kunci API dari [dasbor OpenAI Platform](https://platform.openai.com/api-keys).
</Step>
<Step title="Jalankan onboarding">
```bash
openclaw onboard --auth-choice openai-api-key
```
Atau berikan key secara langsung:
Atau berikan kunci secara langsung:
```bash
openclaw onboard --openai-api-key "$OPENAI_API_KEY"
@ -68,15 +68,15 @@ x-i18n:
</Step>
</Steps>
### Ringkasan rute
### Ringkasan jalur
| Model ref | Rute | Auth |
|-----------|------|------|
| Ref model | Jalur | Autentikasi |
|-----------|-------|-------------|
| `openai/gpt-5.4` | API OpenAI Platform langsung | `OPENAI_API_KEY` |
| `openai/gpt-5.4-pro` | API OpenAI Platform langsung | `OPENAI_API_KEY` |
<Note>
Login ChatGPT/Codex dirutekan melalui `openai-codex/*`, bukan `openai/*`.
Masuk ChatGPT/Codex diarahkan melalui `openai-codex/*`, bukan `openai/*`.
</Note>
### Contoh config
@ -89,13 +89,13 @@ x-i18n:
```
<Warning>
OpenClaw **tidak** mengekspos `openai/gpt-5.3-codex-spark` pada jalur API langsung. Permintaan API OpenAI live menolak model tersebut. Spark hanya untuk Codex.
OpenClaw **tidak** mengekspos `openai/gpt-5.3-codex-spark` pada jalur API langsung. Permintaan API OpenAI langsung menolak model tersebut. Spark hanya untuk Codex.
</Warning>
</Tab>
<Tab title="Langganan Codex">
**Terbaik untuk:** menggunakan langganan ChatGPT/Codex Anda alih-alih API key terpisah. Codex cloud memerlukan login ChatGPT.
**Terbaik untuk:** menggunakan langganan ChatGPT/Codex Anda alih-alih kunci API terpisah. Codex cloud memerlukan masuk ChatGPT.
<Steps>
<Step title="Jalankan OAuth Codex">
@ -109,13 +109,13 @@ x-i18n:
openclaw models auth login --provider openai-codex
```
Untuk penyiapan headless atau yang bermusuhan dengan callback, tambahkan `--device-code` untuk login menggunakan alur device-code ChatGPT alih-alih callback browser localhost:
Untuk penyiapan headless atau yang tidak bersahabat dengan callback, tambahkan `--device-code` untuk masuk dengan alur kode perangkat ChatGPT alih-alih callback browser localhost:
```bash
openclaw models auth login --provider openai-codex --device-code
```
</Step>
<Step title="Setel model default">
<Step title="Tetapkan model default">
```bash
openclaw config set agents.defaults.model.primary openai-codex/gpt-5.4
```
@ -127,15 +127,15 @@ x-i18n:
</Step>
</Steps>
### Ringkasan rute
### Ringkasan jalur
| Model ref | Rute | Auth |
|-----------|------|------|
| `openai-codex/gpt-5.4` | OAuth ChatGPT/Codex | Login Codex |
| `openai-codex/gpt-5.3-codex-spark` | OAuth ChatGPT/Codex | Login Codex (bergantung entitlement) |
| Ref model | Jalur | Autentikasi |
|-----------|-------|-------------|
| `openai-codex/gpt-5.4` | OAuth ChatGPT/Codex | masuk Codex |
| `openai-codex/gpt-5.3-codex-spark` | OAuth ChatGPT/Codex | masuk Codex (bergantung pada entitlement) |
<Note>
Rute ini secara sengaja terpisah dari `openai/gpt-5.4`. Gunakan `openai/*` dengan API key untuk akses Platform langsung, dan `openai-codex/*` untuk akses langganan Codex.
Jalur ini sengaja dipisahkan dari `openai/gpt-5.4`. Gunakan `openai/*` dengan kunci API untuk akses Platform langsung, dan `openai-codex/*` untuk akses langganan Codex.
</Note>
### Contoh config
@ -147,7 +147,7 @@ x-i18n:
```
<Note>
Onboarding tidak lagi mengimpor materi OAuth dari `~/.codex`. Login dengan OAuth browser (default) atau alur device-code di atas — OpenClaw mengelola kredensial yang dihasilkan di penyimpanan auth agent miliknya sendiri.
Onboarding tidak lagi mengimpor materi OAuth dari `~/.codex`. Masuklah dengan OAuth browser (default) atau alur kode perangkat di atas — OpenClaw mengelola kredensial yang dihasilkan di penyimpanan autentikasi agennya sendiri.
</Note>
### Batas context window
@ -157,9 +157,9 @@ x-i18n:
Untuk `openai-codex/gpt-5.4`:
- `contextWindow` native: `1050000`
- Batas default runtime `contextTokens`: `272000`
- Batas `contextTokens` runtime default: `272000`
Batas default yang lebih kecil memiliki karakteristik latensi dan kualitas yang lebih baik dalam praktik. Timpa dengan `contextTokens`:
Batas default yang lebih kecil memiliki karakteristik latensi dan kualitas yang lebih baik dalam praktik. Ganti nilainya dengan `contextTokens`:
```json5
{
@ -182,12 +182,12 @@ x-i18n:
## Pembuatan gambar
Plugin `openai` bawaan mendaftarkan pembuatan gambar melalui tool `image_generate`.
Plugin `openai` bawaan mendaftarkan pembuatan gambar melalui alat `image_generate`.
| Kapabilitas | Nilai |
| Kemampuan | Nilai |
| ------------------------ | ---------------------------------- |
| Model default | `openai/gpt-image-2` |
| Maks gambar per permintaan | 4 |
| Gambar maksimum per permintaan | 4 |
| Mode edit | Diaktifkan (hingga 5 gambar referensi) |
| Override ukuran | Didukung, termasuk ukuran 2K/4K |
| Rasio aspek / resolusi | Tidak diteruskan ke OpenAI Images API |
@ -203,34 +203,34 @@ Plugin `openai` bawaan mendaftarkan pembuatan gambar melalui tool `image_generat
```
<Note>
Lihat [Pembuatan Gambar](/id/tools/image-generation) untuk parameter tool bersama, pemilihan provider, dan perilaku failover.
Lihat [Pembuatan Gambar](/id/tools/image-generation) untuk parameter alat bersama, pemilihan penyedia, dan perilaku failover.
</Note>
`gpt-image-2` adalah default untuk pembuatan text-to-image dan pengeditan gambar OpenAI. `gpt-image-1` tetap dapat digunakan sebagai override model eksplisit, tetapi alur kerja gambar OpenAI baru seharusnya menggunakan `openai/gpt-image-2`.
`gpt-image-2` adalah default untuk pembuatan teks-ke-gambar OpenAI dan pengeditan gambar. `gpt-image-1` tetap dapat digunakan sebagai override model eksplisit, tetapi alur kerja gambar OpenAI yang baru sebaiknya menggunakan `openai/gpt-image-2`.
Buat:
Hasilkan:
```
/tool image_generate model=openai/gpt-image-2 prompt="A polished launch poster for OpenClaw on macOS" size=3840x2160 count=1
/tool image_generate model=openai/gpt-image-2 prompt="Poster peluncuran yang rapi untuk OpenClaw di macOS" size=3840x2160 count=1
```
Edit:
```
/tool image_generate model=openai/gpt-image-2 prompt="Preserve the object shape, change the material to translucent glass" image=/path/to/reference.png size=1024x1536
/tool image_generate model=openai/gpt-image-2 prompt="Pertahankan bentuk objek, ubah materialnya menjadi kaca transparan" image=/path/to/reference.png size=1024x1536
```
## Pembuatan video
Plugin `openai` bawaan mendaftarkan pembuatan video melalui tool `video_generate`.
Plugin `openai` bawaan mendaftarkan pembuatan video melalui alat `video_generate`.
| Kapabilitas | Nilai |
| Kemampuan | Nilai |
| ---------------- | --------------------------------------------------------------------------------- |
| Model default | `openai/sora-2` |
| Mode | Text-to-video, image-to-video, edit satu video |
| Input referensi | 1 gambar atau 1 video |
| Mode | Teks-ke-video, gambar-ke-video, edit video tunggal |
| Input referensi | 1 gambar atau 1 video |
| Override ukuran | Didukung |
| Override lainnya | `aspectRatio`, `resolution`, `audio`, `watermark` diabaikan dengan peringatan tool |
| Override lain | `aspectRatio`, `resolution`, `audio`, `watermark` diabaikan dengan peringatan alat |
```json5
{
@ -243,16 +243,16 @@ Plugin `openai` bawaan mendaftarkan pembuatan video melalui tool `video_generate
```
<Note>
Lihat [Pembuatan Video](/id/tools/video-generation) untuk parameter tool bersama, pemilihan provider, dan perilaku failover.
Lihat [Pembuatan Video](/id/tools/video-generation) untuk parameter alat bersama, pemilihan penyedia, dan perilaku failover.
</Note>
## Kontribusi prompt GPT-5
OpenClaw menambahkan kontribusi prompt GPT-5 bersama untuk eksekusi keluarga GPT-5 lintas provider. Kontribusi ini berlaku berdasarkan id model, sehingga `openai/gpt-5.4`, `openai-codex/gpt-5.4`, `openrouter/openai/gpt-5.4`, `opencode/gpt-5.4`, dan ref GPT-5 kompatibel lainnya menerima overlay yang sama. Model GPT-4.x yang lebih lama tidak.
OpenClaw menambahkan kontribusi prompt GPT-5 bersama untuk eksekusi keluarga GPT-5 di seluruh penyedia. Ini diterapkan berdasarkan id model, sehingga `openai/gpt-5.4`, `openai-codex/gpt-5.4`, `openrouter/openai/gpt-5.4`, `opencode/gpt-5.4`, dan ref GPT-5 kompatibel lainnya menerima overlay yang sama. Model GPT-4.x yang lebih lama tidak menerimanya.
Provider harness Codex native bawaan (`codex/*`) menggunakan perilaku GPT-5 dan overlay Heartbeat yang sama melalui instruksi developer app-server Codex, sehingga sesi `codex/gpt-5.x` mempertahankan panduan tindak lanjut dan Heartbeat proaktif yang sama meskipun Codex memiliki sisa prompt harness.
Penyedia harness Codex native bawaan (`codex/*`) menggunakan perilaku GPT-5 dan overlay Heartbeat yang sama melalui instruksi developer server-aplikasi Codex, sehingga sesi `codex/gpt-5.x` mempertahankan panduan tindak lanjut dan Heartbeat proaktif yang sama meskipun Codex menangani sisa prompt harness.
Kontribusi GPT-5 menambahkan kontrak perilaku bertag untuk persistensi persona, keamanan eksekusi, disiplin tool, bentuk output, pemeriksaan penyelesaian, dan verifikasi. Perilaku balasan spesifik saluran dan silent-message tetap berada dalam system prompt OpenClaw bersama dan kebijakan pengiriman keluar. Panduan GPT-5 selalu diaktifkan untuk model yang cocok. Lapisan gaya interaksi yang ramah bersifat terpisah dan dapat dikonfigurasi.
Kontribusi GPT-5 menambahkan kontrak perilaku bertag untuk persistensi persona, keamanan eksekusi, disiplin alat, bentuk output, pemeriksaan penyelesaian, dan verifikasi. Perilaku balasan khusus channel dan pesan senyap tetap berada di prompt sistem OpenClaw bersama dan kebijakan pengiriman keluar. Panduan GPT-5 selalu diaktifkan untuk model yang cocok. Lapisan gaya interaksi ramah terpisah dan dapat dikonfigurasi.
| Nilai | Efek |
| ---------------------- | ------------------------------------------ |
@ -282,14 +282,14 @@ Kontribusi GPT-5 menambahkan kontrak perilaku bertag untuk persistensi persona,
</Tabs>
<Tip>
Nilai tidak peka huruf besar/kecil saat runtime, sehingga `"Off"` dan `"off"` sama-sama menonaktifkan lapisan gaya ramah.
Nilai tidak peka huruf besar/kecil saat runtime, jadi `"Off"` dan `"off"` keduanya menonaktifkan lapisan gaya ramah.
</Tip>
<Note>
`plugins.entries.openai.config.personality` legacy masih dibaca sebagai fallback kompatibilitas saat pengaturan bersama `agents.defaults.promptOverlays.gpt5.personality` tidak disetel.
`plugins.entries.openai.config.personality` lama masih dibaca sebagai fallback kompatibilitas saat pengaturan bersama `agents.defaults.promptOverlays.gpt5.personality` tidak disetel.
</Note>
## Suara dan ucapan
## Suara dan speech
<AccordionGroup>
<Accordion title="Sintesis ucapan (TTS)">
@ -301,9 +301,9 @@ Nilai tidak peka huruf besar/kecil saat runtime, sehingga `"Off"` dan `"off"` sa
| Suara | `messages.tts.providers.openai.voice` | `coral` |
| Kecepatan | `messages.tts.providers.openai.speed` | (tidak disetel) |
| Instruksi | `messages.tts.providers.openai.instructions` | (tidak disetel, hanya `gpt-4o-mini-tts`) |
| Format | `messages.tts.providers.openai.responseFormat` | `opus` untuk voice note, `mp3` untuk file |
| API key | `messages.tts.providers.openai.apiKey` | Fallback ke `OPENAI_API_KEY` |
| Base URL | `messages.tts.providers.openai.baseUrl` | `https://api.openai.com/v1` |
| Format | `messages.tts.providers.openai.responseFormat` | `opus` untuk catatan suara, `mp3` untuk file |
| Kunci API | `messages.tts.providers.openai.apiKey` | Fallback ke `OPENAI_API_KEY` |
| URL dasar | `messages.tts.providers.openai.baseUrl` | `https://api.openai.com/v1` |
Model yang tersedia: `gpt-4o-mini-tts`, `tts-1`, `tts-1-hd`. Suara yang tersedia: `alloy`, `ash`, `ballad`, `cedar`, `coral`, `echo`, `fable`, `juniper`, `marin`, `onyx`, `nova`, `sage`, `shimmer`, `verse`.
@ -320,21 +320,21 @@ Nilai tidak peka huruf besar/kecil saat runtime, sehingga `"Off"` dan `"off"` sa
```
<Note>
Setel `OPENAI_TTS_BASE_URL` untuk menimpa base URL TTS tanpa memengaruhi endpoint API chat.
Setel `OPENAI_TTS_BASE_URL` untuk mengganti URL dasar TTS tanpa memengaruhi endpoint API chat.
</Note>
</Accordion>
<Accordion title="Speech-to-text">
Plugin `openai` bawaan mendaftarkan batch speech-to-text melalui
permukaan transkripsi pemahaman media OpenClaw.
Plugin `openai` bawaan mendaftarkan speech-to-text batch melalui
permukaan transkripsi media-understanding OpenClaw.
- Model default: `gpt-4o-transcribe`
- Endpoint: OpenAI REST `/v1/audio/transcriptions`
- Jalur input: unggah file audio multipart
- Didukung oleh OpenClaw di mana pun transkripsi audio masuk menggunakan
`tools.media.audio`, termasuk segmen saluran suara Discord dan lampiran
audio saluran
`tools.media.audio`, termasuk segmen voice-channel Discord dan lampiran
audio channel
Untuk memaksa OpenAI untuk transkripsi audio masuk:
@ -356,31 +356,31 @@ Nilai tidak peka huruf besar/kecil saat runtime, sehingga `"Off"` dan `"off"` sa
}
```
Petunjuk bahasa dan prompt diteruskan ke OpenAI saat disuplai oleh
config media audio bersama atau permintaan transkripsi per-panggilan.
Petunjuk bahasa dan prompt diteruskan ke OpenAI saat disediakan oleh
config media audio bersama atau permintaan transkripsi per panggilan.
</Accordion>
<Accordion title="Transkripsi realtime">
Plugin `openai` bawaan mendaftarkan transkripsi realtime untuk Plugin Voice Call.
Plugin `openai` bawaan mendaftarkan transkripsi realtime untuk plugin Voice Call.
| Pengaturan | Jalur config | Default |
|---------|------------|---------|
| Model | `plugins.entries.voice-call.config.streaming.providers.openai.model` | `gpt-4o-transcribe` |
| Bahasa | `...openai.language` | (tidak disetel) |
| Prompt | `...openai.prompt` | (tidak disetel) |
| Durasi hening | `...openai.silenceDurationMs` | `800` |
| Durasi senyap | `...openai.silenceDurationMs` | `800` |
| Ambang VAD | `...openai.vadThreshold` | `0.5` |
| API key | `...openai.apiKey` | Fallback ke `OPENAI_API_KEY` |
| Kunci API | `...openai.apiKey` | Fallback ke `OPENAI_API_KEY` |
<Note>
Menggunakan koneksi WebSocket ke `wss://api.openai.com/v1/realtime` dengan audio G.711 u-law (`g711_ulaw` / `audio/pcmu`). Provider streaming ini ditujukan untuk jalur transkripsi realtime Voice Call; suara Discord saat ini merekam segmen pendek dan menggunakan jalur transkripsi batch `tools.media.audio`.
Menggunakan koneksi WebSocket ke `wss://api.openai.com/v1/realtime` dengan audio G.711 u-law (`g711_ulaw` / `audio/pcmu`). Penyedia streaming ini untuk jalur transkripsi realtime Voice Call; voice Discord saat ini merekam segmen pendek dan menggunakan jalur transkripsi batch `tools.media.audio`.
</Note>
</Accordion>
<Accordion title="Suara realtime">
Plugin `openai` bawaan mendaftarkan suara realtime untuk Plugin Voice Call.
Plugin `openai` bawaan mendaftarkan suara realtime untuk plugin Voice Call.
| Pengaturan | Jalur config | Default |
|---------|------------|---------|
@ -388,33 +388,159 @@ Nilai tidak peka huruf besar/kecil saat runtime, sehingga `"Off"` dan `"off"` sa
| Suara | `...openai.voice` | `alloy` |
| Temperature | `...openai.temperature` | `0.8` |
| Ambang VAD | `...openai.vadThreshold` | `0.5` |
| Durasi hening | `...openai.silenceDurationMs` | `500` |
| API key | `...openai.apiKey` | Fallback ke `OPENAI_API_KEY` |
| Durasi senyap | `...openai.silenceDurationMs` | `500` |
| Kunci API | `...openai.apiKey` | Fallback ke `OPENAI_API_KEY` |
<Note>
Mendukung Azure OpenAI melalui kunci config `azureEndpoint` dan `azureDeployment`. Mendukung pemanggilan tool dua arah. Menggunakan format audio G.711 u-law.
Mendukung Azure OpenAI melalui kunci config `azureEndpoint` dan `azureDeployment`. Mendukung pemanggilan alat dua arah. Menggunakan format audio G.711 u-law.
</Note>
</Accordion>
</AccordionGroup>
## Endpoint Azure OpenAI
Penyedia `openai` bawaan dapat menargetkan resource Azure OpenAI untuk pembuatan
gambar dengan mengganti URL dasar. Pada jalur pembuatan gambar, OpenClaw
mendeteksi hostname Azure pada `models.providers.openai.baseUrl` dan beralih ke
bentuk permintaan Azure secara otomatis.
<Note>
Suara realtime menggunakan jalur konfigurasi terpisah
(`plugins.entries.voice-call.config.realtime.providers.openai.azureEndpoint`)
dan tidak dipengaruhi oleh `models.providers.openai.baseUrl`. Lihat accordion **Suara
realtime** di bawah [Suara dan speech](#voice-and-speech) untuk pengaturan
Azure-nya.
</Note>
Gunakan Azure OpenAI ketika:
- Anda sudah memiliki langganan, kuota, atau perjanjian enterprise Azure OpenAI
- Anda memerlukan residensi data regional atau kontrol kepatuhan yang disediakan Azure
- Anda ingin mempertahankan lalu lintas di dalam tenancy Azure yang sudah ada
### Konfigurasi
Untuk pembuatan gambar Azure melalui penyedia `openai` bawaan, arahkan
`models.providers.openai.baseUrl` ke resource Azure Anda dan setel `apiKey` ke
kunci Azure OpenAI (bukan kunci OpenAI Platform):
```json5
{
models: {
providers: {
openai: {
baseUrl: "https://<your-resource>.openai.azure.com",
apiKey: "<azure-openai-api-key>",
},
},
},
}
```
OpenClaw mengenali sufiks host Azure berikut untuk jalur pembuatan gambar Azure:
- `*.openai.azure.com`
- `*.services.ai.azure.com`
- `*.cognitiveservices.azure.com`
Untuk permintaan pembuatan gambar pada host Azure yang dikenali, OpenClaw:
- Mengirim header `api-key` alih-alih `Authorization: Bearer`
- Menggunakan jalur yang dicakup deployment (`/openai/deployments/{deployment}/...`)
- Menambahkan `?api-version=...` ke setiap permintaan
URL dasar lain (OpenAI publik, proxy yang kompatibel dengan OpenAI) tetap menggunakan
bentuk permintaan gambar OpenAI standar.
<Note>
Perutean Azure untuk jalur pembuatan gambar penyedia `openai` memerlukan
OpenClaw 2026.4.22 atau yang lebih baru. Versi sebelumnya memperlakukan
`openai.baseUrl` kustom apa pun seperti endpoint OpenAI publik dan akan gagal terhadap
deployment gambar Azure.
</Note>
### Versi API
Setel `AZURE_OPENAI_API_VERSION` untuk mematok versi pratinjau atau GA Azure tertentu
untuk jalur pembuatan gambar Azure:
```bash
export AZURE_OPENAI_API_VERSION="2024-12-01-preview"
```
Default-nya adalah `2024-12-01-preview` saat variabel tidak disetel.
### Nama model adalah nama deployment
Azure OpenAI mengikat model ke deployment. Untuk permintaan pembuatan gambar Azure
yang dirutekan melalui penyedia `openai` bawaan, field `model` di OpenClaw
harus berupa **nama deployment Azure** yang Anda konfigurasi di portal Azure, bukan
id model OpenAI publik.
Jika Anda membuat deployment bernama `gpt-image-2-prod` yang menyajikan `gpt-image-2`:
```
/tool image_generate model=openai/gpt-image-2-prod prompt="Poster yang bersih" size=1024x1024 count=1
```
Aturan nama deployment yang sama berlaku untuk panggilan pembuatan gambar yang dirutekan melalui
penyedia `openai` bawaan.
### Ketersediaan regional
Pembuatan gambar Azure saat ini hanya tersedia di sebagian wilayah
(misalnya `eastus2`, `swedencentral`, `polandcentral`, `westus3`,
`uaenorth`). Periksa daftar wilayah Microsoft saat ini sebelum membuat
deployment, dan konfirmasikan bahwa model spesifik tersebut ditawarkan di wilayah Anda.
### Perbedaan parameter
Azure OpenAI dan OpenAI publik tidak selalu menerima parameter gambar yang sama.
Azure dapat menolak opsi yang diizinkan oleh OpenAI publik (misalnya nilai
`background` tertentu pada `gpt-image-2`) atau hanya mengeksposnya pada versi
model tertentu. Perbedaan ini berasal dari Azure dan model yang mendasarinya, bukan
OpenClaw. Jika permintaan Azure gagal dengan kesalahan validasi, periksa
kumpulan parameter yang didukung oleh deployment dan versi API spesifik Anda di
portal Azure.
<Note>
Azure OpenAI menggunakan transport native dan perilaku compat tetapi tidak menerima
header atribusi tersembunyi OpenClaw. Lihat accordion **Native vs rute yang kompatibel dengan OpenAI**
di bawah [Konfigurasi lanjutan](#advanced-configuration)
untuk detailnya.
</Note>
<Tip>
Untuk penyedia Azure OpenAI Responses terpisah (berbeda dari penyedia `openai`),
lihat ref model `azure-openai-responses/*` di
accordion [Compaction sisi server](#server-side-compaction-responses-api).
</Tip>
<Note>
Lalu lintas chat dan Responses Azure memerlukan config penyedia/API khusus Azure selain
override URL dasar. Jika Anda ingin panggilan model Azure di luar pembuatan
gambar, gunakan alur onboarding atau config penyedia yang menetapkan
bentuk API/autentikasi Azure yang sesuai daripada mengasumsikan `openai.baseUrl` saja sudah cukup.
</Note>
## Konfigurasi lanjutan
<AccordionGroup>
<Accordion title="Transport (WebSocket vs SSE)">
OpenClaw menggunakan WebSocket-first dengan fallback SSE (`"auto"`) untuk `openai/*` dan `openai-codex/*`.
OpenClaw menggunakan WebSocket terlebih dahulu dengan fallback SSE (`"auto"`) untuk `openai/*` dan `openai-codex/*`.
Dalam mode `"auto"`, OpenClaw:
- Mencoba ulang satu kegagalan WebSocket awal sebelum fallback ke SSE
- Setelah kegagalan, menandai WebSocket sebagai terdegradasi selama ~60 detik dan menggunakan SSE selama cooldown
- Menambahkan header identitas sesi dan giliran yang stabil untuk retry dan reconnect
- Menormalkan penghitung penggunaan (`input_tokens` / `prompt_tokens`) lintas varian transport
- Setelah kegagalan, menandai WebSocket sebagai menurun selama ~60 detik dan menggunakan SSE selama masa pendinginan
- Melampirkan header identitas sesi dan giliran yang stabil untuk percobaan ulang dan penyambungan kembali
- Menormalkan penghitung penggunaan (`input_tokens` / `prompt_tokens`) di seluruh varian transport
| Nilai | Perilaku |
|-------|----------|
| `"auto"` (default) | WebSocket terlebih dahulu, fallback SSE |
| `"sse"` | Paksa hanya SSE |
| `"websocket"` | Paksa hanya WebSocket |
| `"sse"` | Paksa SSE saja |
| `"websocket"` | Paksa WebSocket saja |
```json5
{
@ -430,7 +556,7 @@ Nilai tidak peka huruf besar/kecil saat runtime, sehingga `"Off"` dan `"off"` sa
}
```
Dokumentasi OpenAI terkait:
Dokumen OpenAI terkait:
- [Realtime API with WebSocket](https://platform.openai.com/docs/guides/realtime-websocket)
- [Streaming API responses (SSE)](https://platform.openai.com/docs/guides/streaming-responses)
@ -480,7 +606,7 @@ Nilai tidak peka huruf besar/kecil saat runtime, sehingga `"Off"` dan `"off"` sa
```
<Note>
Override sesi menang atas config. Menghapus override sesi di UI Sessions mengembalikan sesi ke default yang dikonfigurasi.
Override sesi mengalahkan config. Menghapus override sesi di UI Sessions mengembalikan sesi ke default yang dikonfigurasi.
</Note>
</Accordion>
@ -504,21 +630,21 @@ Nilai tidak peka huruf besar/kecil saat runtime, sehingga `"Off"` dan `"off"` sa
Nilai yang didukung: `auto`, `default`, `flex`, `priority`.
<Warning>
`serviceTier` hanya diteruskan ke endpoint OpenAI native (`api.openai.com`) dan endpoint Codex native (`chatgpt.com/backend-api`). Jika Anda merutekan salah satu provider melalui proxy, OpenClaw membiarkan `service_tier` tetap apa adanya.
`serviceTier` hanya diteruskan ke endpoint OpenAI native (`api.openai.com`) dan endpoint Codex native (`chatgpt.com/backend-api`). Jika Anda merutekan salah satu penyedia melalui proxy, OpenClaw membiarkan `service_tier` tidak tersentuh.
</Warning>
</Accordion>
<Accordion title="Compaction sisi server (Responses API)">
Untuk model OpenAI Responses langsung (`openai/*` pada `api.openai.com`), OpenClaw otomatis mengaktifkan Compaction sisi server:
Untuk model OpenAI Responses langsung (`openai/*` pada `api.openai.com`), OpenClaw mengaktifkan otomatis Compaction sisi server:
- Memaksa `store: true` (kecuali compat model menetapkan `supportsStore: false`)
- Menyuntikkan `context_management: [{ type: "compaction", compact_threshold: ... }]`
- Menyisipkan `context_management: [{ type: "compaction", compact_threshold: ... }]`
- `compact_threshold` default: 70% dari `contextWindow` (atau `80000` saat tidak tersedia)
<Tabs>
<Tab title="Aktifkan secara eksplisit">
Berguna untuk endpoint kompatibel seperti Azure OpenAI Responses:
Berguna untuk endpoint yang kompatibel seperti Azure OpenAI Responses:
```json5
{
@ -570,7 +696,7 @@ Nilai tidak peka huruf besar/kecil saat runtime, sehingga `"Off"` dan `"off"` sa
</Tabs>
<Note>
`responsesServerCompaction` hanya mengontrol penyuntikan `context_management`. Model OpenAI Responses langsung tetap memaksa `store: true` kecuali compat menetapkan `supportsStore: false`.
`responsesServerCompaction` hanya mengontrol penyisipan `context_management`. Model OpenAI Responses langsung tetap memaksa `store: true` kecuali compat menetapkan `supportsStore: false`.
</Note>
</Accordion>
@ -589,32 +715,32 @@ Nilai tidak peka huruf besar/kecil saat runtime, sehingga `"Off"` dan `"off"` sa
```
Dengan `strict-agentic`, OpenClaw:
- Tidak lagi memperlakukan giliran yang hanya berisi rencana sebagai kemajuan yang berhasil saat aksi tool tersedia
- Mencoba ulang giliran dengan pengarah bertindak-sekarang
- Mengaktifkan `update_plan` secara otomatis untuk pekerjaan yang substansial
- Memunculkan state terblokir eksplisit jika model terus merencanakan tanpa bertindak
- Tidak lagi memperlakukan giliran yang hanya berisi rencana sebagai progres yang berhasil saat tindakan alat tersedia
- Mencoba ulang giliran dengan arahan bertindak sekarang
- Mengaktifkan otomatis `update_plan` untuk pekerjaan yang substansial
- Menampilkan status terblokir yang eksplisit jika model terus merencanakan tanpa bertindak
<Note>
Hanya berlaku untuk eksekusi keluarga GPT-5 OpenAI dan Codex. Provider lain dan keluarga model yang lebih lama tetap menggunakan perilaku default.
Dicakup hanya untuk eksekusi keluarga GPT-5 OpenAI dan Codex. Penyedia lain dan keluarga model yang lebih lama tetap menggunakan perilaku default.
</Note>
</Accordion>
<Accordion title="Rute native vs kompatibel OpenAI">
OpenClaw memperlakukan endpoint OpenAI langsung, Codex, dan Azure OpenAI secara berbeda dari proxy `/v1` generik yang kompatibel OpenAI:
<Accordion title="Rute native vs yang kompatibel dengan OpenAI">
OpenClaw memperlakukan endpoint OpenAI langsung, Codex, dan Azure OpenAI secara berbeda dari proxy `/v1` generik yang kompatibel dengan OpenAI:
**Rute native** (`openai/*`, `openai-codex/*`, Azure OpenAI):
- Mempertahankan `reasoning: { effort: "none" }` hanya untuk model yang mendukung effort OpenAI `none`
- Menghilangkan reasoning yang dinonaktifkan untuk model atau proxy yang menolak `reasoning.effort: "none"`
- Menjadikan skema tool default ke mode ketat
- Menambahkan hidden attribution header hanya pada host native yang terverifikasi
- Menjadikan schema alat mode ketat secara default
- Melampirkan header atribusi tersembunyi hanya pada host native yang terverifikasi
- Mempertahankan pembentukan permintaan khusus OpenAI (`service_tier`, `store`, reasoning-compat, petunjuk prompt-cache)
**Rute proxy/kompatibel:**
- Menggunakan perilaku compat yang lebih longgar
- Tidak memaksa skema tool ketat atau header khusus native
- Tidak memaksa schema alat ketat atau header khusus native
Azure OpenAI menggunakan transport native dan perilaku compat tetapi tidak menerima hidden attribution header.
Azure OpenAI menggunakan transport native dan perilaku compat tetapi tidak menerima header atribusi tersembunyi.
</Accordion>
</AccordionGroup>
@ -623,15 +749,15 @@ Nilai tidak peka huruf besar/kecil saat runtime, sehingga `"Off"` dan `"off"` sa
<CardGroup cols={2}>
<Card title="Pemilihan model" href="/id/concepts/model-providers" icon="layers">
Memilih provider, model ref, dan perilaku failover.
Memilih penyedia, ref model, dan perilaku failover.
</Card>
<Card title="Pembuatan gambar" href="/id/tools/image-generation" icon="image">
Parameter tool gambar bersama dan pemilihan provider.
Parameter alat gambar bersama dan pemilihan penyedia.
</Card>
<Card title="Pembuatan video" href="/id/tools/video-generation" icon="video">
Parameter tool video bersama dan pemilihan provider.
Parameter alat video bersama dan pemilihan penyedia.
</Card>
<Card title="OAuth dan auth" href="/id/gateway/authentication" icon="key">
Detail auth dan aturan penggunaan ulang kredensial.
<Card title="OAuth dan autentikasi" href="/id/gateway/authentication" icon="key">
Detail autentikasi dan aturan penggunaan ulang kredensial.
</Card>
</CardGroup>

View File

@ -1,50 +1,51 @@
---
read_when:
- Menjalankan atau memperbaiki pengujian
summary: Cara menjalankan pengujian secara lokal (Vitest) dan kapan menggunakan mode force/coverage
summary: Cara menjalankan pengujian secara lokal (`vitest`) dan kapan menggunakan mode force/coverage
title: Pengujian
x-i18n:
generated_at: "2026-04-22T04:26:58Z"
generated_at: "2026-04-23T13:58:11Z"
model: gpt-5.4
provider: openai
source_hash: ed665840ef2c7728da8ec923eb3ea2878d9b20a841cb2fe4116a7f6334567b8e
source_hash: e0bcecb0868b3b68361e5ef78afc3170f2a481771bda8f7d54200b1d778d044a
source_path: reference/test.md
workflow: 15
---
# Pengujian
- Kit pengujian lengkap (suite, live, Docker): [Testing](/id/help/testing)
- Kit pengujian lengkap (suite, live, Docker): [Pengujian](/id/help/testing)
- `pnpm test:force`: Menghentikan proses gateway yang masih berjalan dan menahan port control default, lalu menjalankan suite Vitest penuh dengan port gateway terisolasi agar pengujian server tidak bertabrakan dengan instance yang sedang berjalan. Gunakan ini ketika proses gateway sebelumnya meninggalkan port 18789 dalam keadaan terpakai.
- `pnpm test:coverage`: Menjalankan suite unit dengan cakupan V8 (melalui `vitest.unit.config.ts`). Ini adalah gate cakupan unit berbasis file yang dimuat, bukan cakupan semua file seluruh repo. Ambang batasnya adalah 70% lines/functions/statements dan 55% branches. Karena `coverage.all` bernilai false, gate ini mengukur file yang dimuat oleh suite cakupan unit alih-alih menganggap setiap file sumber split-lane sebagai tidak tercakup.
- `pnpm test:force`: Menghentikan proses gateway yang masih tertinggal dan menahan port kontrol default, lalu menjalankan suite Vitest lengkap dengan port gateway terisolasi agar pengujian server tidak berbenturan dengan instance yang sedang berjalan. Gunakan ini saat proses gateway sebelumnya membuat port 18789 tetap terpakai.
- `pnpm test:coverage`: Menjalankan suite unit dengan cakupan V8 (melalui `vitest.unit.config.ts`). Ini adalah gate cakupan unit untuk file yang dimuat, bukan cakupan semua file di seluruh repo. Ambangnya adalah 70% lines/functions/statements dan 55% branches. Karena `coverage.all` bernilai false, gate ini mengukur file yang dimuat oleh suite cakupan unit alih-alih menganggap setiap file sumber split-lane sebagai tidak tercakup.
- `pnpm test:coverage:changed`: Menjalankan cakupan unit hanya untuk file yang berubah sejak `origin/main`.
- `pnpm test:changed`: memperluas path git yang berubah menjadi lane Vitest yang dibatasi cakupan ketika diff hanya menyentuh file source/test yang dapat dirutekan. Perubahan config/setup tetap fallback ke eksekusi native root projects agar edit wiring menjalankan ulang secara luas bila diperlukan.
- `pnpm changed:lanes`: menampilkan lane arsitektural yang dipicu oleh diff terhadap `origin/main`.
- `pnpm check:changed`: menjalankan smart changed gate untuk diff terhadap `origin/main`. Perintah ini menjalankan pekerjaan core dengan lane pengujian core, pekerjaan extension dengan lane pengujian extension, pekerjaan test-only dengan hanya typecheck/tests test, memperluas perubahan Plugin SDK publik atau kontrak plugin ke validasi extension, dan menjaga version bump metadata rilis saja tetap pada pemeriksaan versi/konfigurasi/dependensi root yang terarah.
- `pnpm test`: merutekan target file/direktori eksplisit melalui lane Vitest yang dibatasi cakupan. Eksekusi tanpa target menggunakan grup shard tetap dan diperluas ke leaf config untuk eksekusi paralel lokal; grup extension selalu diperluas ke konfigurasi shard per-plugin alih-alih satu proses root-project besar.
- `pnpm test:changed`: memperluas path git yang berubah menjadi lane Vitest terbatas ketika diff hanya menyentuh file source/test yang bisa dirutekan. Perubahan config/setup tetap kembali ke native root projects run agar perubahan wiring menjalankan ulang cakupan luas saat diperlukan.
- `pnpm changed:lanes`: menampilkan lane arsitektur yang dipicu oleh diff terhadap `origin/main`.
- `pnpm check:changed`: menjalankan gate perubahan pintar untuk diff terhadap `origin/main`. Ini menjalankan pekerjaan core dengan lane pengujian core, pekerjaan extension dengan lane pengujian extension, pekerjaan khusus pengujian hanya dengan typecheck/pengujian pengujian, memperluas perubahan public Plugin SDK atau plugin-contract ke validasi extension, dan menjaga version bump yang hanya berupa metadata rilis pada pemeriksaan version/config/root-dependency yang terarah.
- `pnpm test`: merutekan target file/direktori eksplisit melalui lane Vitest terbatas. Eksekusi tanpa target menggunakan kelompok shard tetap dan diperluas ke leaf configs untuk eksekusi paralel lokal; kelompok extension selalu diperluas ke config shard per-extension, bukan satu proses root-project besar.
- Eksekusi shard penuh dan extension memperbarui data timing lokal di `.artifacts/vitest-shard-timings.json`; eksekusi berikutnya menggunakan timing tersebut untuk menyeimbangkan shard lambat dan cepat. Setel `OPENCLAW_TEST_PROJECTS_TIMINGS=0` untuk mengabaikan artefak timing lokal.
- File pengujian `plugin-sdk` dan `commands` tertentu kini dirutekan melalui lane ringan khusus yang hanya mempertahankan `test/setup.ts`, sementara kasus yang berat pada runtime tetap berada di lane yang sudah ada.
- File source helper `plugin-sdk` dan `commands` tertentu juga memetakan `pnpm test:changed` ke pengujian sibling eksplisit di lane ringan tersebut, sehingga edit helper kecil menghindari eksekusi ulang suite berat yang didukung runtime.
- `auto-reply` sekarang juga dipecah menjadi tiga konfigurasi khusus (`core`, `top-level`, `reply`) sehingga harness balasan tidak mendominasi pengujian status/token/helper top-level yang lebih ringan.
- Konfigurasi dasar Vitest kini default ke `pool: "threads"` dan `isolate: false`, dengan runner bersama non-isolated diaktifkan di seluruh konfigurasi repo.
- File pengujian `plugin-sdk` dan `commands` tertentu kini dirutekan melalui lane ringan khusus yang hanya mempertahankan `test/setup.ts`, sementara kasus yang berat saat runtime tetap berada di lane yang sudah ada.
- File source helper `plugin-sdk` dan `commands` tertentu juga memetakan `pnpm test:changed` ke pengujian sibling eksplisit di lane ringan tersebut, sehingga perubahan helper kecil tidak memicu ulang suite berat yang didukung runtime.
- `auto-reply` kini juga dibagi menjadi tiga config khusus (`core`, `top-level`, `reply`) agar harness reply tidak mendominasi pengujian status/token/helper top-level yang lebih ringan.
- Config dasar Vitest kini menggunakan default `pool: "threads"` dan `isolate: false`, dengan runner bersama non-isolated diaktifkan di seluruh config repo.
- `pnpm test:channels` menjalankan `vitest.channels.config.ts`.
- `pnpm test:extensions` dan `pnpm test extensions` menjalankan semua shard extension/plugin. Extension channel berat dan OpenAI berjalan sebagai shard khusus; grup extension lainnya tetap dibatch. Gunakan `pnpm test extensions/<id>` untuk satu lane plugin bawaan.
- `pnpm test:perf:imports`: mengaktifkan pelaporan durasi impor + rincian impor Vitest, sambil tetap menggunakan routing lane terbatas untuk target file/direktori eksplisit.
- `pnpm test:perf:imports:changed`: profiling impor yang sama, tetapi hanya untuk file yang berubah sejak `origin/main`.
- `pnpm test:perf:changed:bench -- --ref <git-ref>` membenchmark path mode changed yang dirutekan terhadap eksekusi native root-project untuk diff git commit yang sama.
- `pnpm test:perf:changed:bench -- --worktree` membenchmark set perubahan worktree saat ini tanpa melakukan commit terlebih dahulu.
- `pnpm test:extensions` dan `pnpm test extensions` menjalankan semua shard extension/plugin. Extension channel berat dan OpenAI berjalan sebagai shard khusus; kelompok extension lain tetap dibatch. Gunakan `pnpm test extensions/<id>` untuk satu lane plugin bawaan.
- `pnpm test:perf:imports`: mengaktifkan pelaporan durasi import + rincian import Vitest, sambil tetap menggunakan perutean lane terbatas untuk target file/direktori eksplisit.
- `pnpm test:perf:imports:changed`: profiling import yang sama, tetapi hanya untuk file yang berubah sejak `origin/main`.
- `pnpm test:perf:changed:bench -- --ref <git-ref>` membenchmark path mode changed yang dirutekan terhadap native root-project run untuk diff git ter-commit yang sama.
- `pnpm test:perf:changed:bench -- --worktree` membenchmark set perubahan worktree saat ini tanpa perlu commit terlebih dahulu.
- `pnpm test:perf:profile:main`: menulis profil CPU untuk thread utama Vitest (`.artifacts/vitest-main-profile`).
- `pnpm test:perf:profile:runner`: menulis profil CPU + heap untuk runner unit (`.artifacts/vitest-runner-profile`).
- Integrasi Gateway: opt-in melalui `OPENCLAW_TEST_INCLUDE_GATEWAY=1 pnpm test` atau `pnpm test:gateway`.
- `pnpm test:e2e`: Menjalankan smoke test end-to-end gateway (multi-instance WS/HTTP/node pairing). Default ke `threads` + `isolate: false` dengan worker adaptif di `vitest.e2e.config.ts`; sesuaikan dengan `OPENCLAW_E2E_WORKERS=<n>` dan setel `OPENCLAW_E2E_VERBOSE=1` untuk log verbose.
- `pnpm test:e2e`: Menjalankan smoke test end-to-end gateway (pairing multi-instance WS/HTTP/node). Default menggunakan `threads` + `isolate: false` dengan worker adaptif di `vitest.e2e.config.ts`; sesuaikan dengan `OPENCLAW_E2E_WORKERS=<n>` dan setel `OPENCLAW_E2E_VERBOSE=1` untuk log verbose.
- `pnpm test:live`: Menjalankan pengujian live provider (minimax/zai). Memerlukan API key dan `LIVE=1` (atau `*_LIVE_TEST=1` khusus provider) agar tidak di-skip.
- `pnpm test:docker:openwebui`: Memulai OpenClaw + Open WebUI dalam Docker, masuk melalui Open WebUI, memeriksa `/api/models`, lalu menjalankan chat terproxy nyata melalui `/api/chat/completions`. Memerlukan model key live yang dapat digunakan (misalnya OpenAI di `~/.profile`), menarik image Open WebUI eksternal, dan tidak diharapkan stabil di CI seperti suite unit/e2e normal.
- `pnpm test:docker:mcp-channels`: Memulai container Gateway yang sudah di-seed dan container klien kedua yang men-spawn `openclaw mcp serve`, lalu memverifikasi penemuan percakapan terarah, pembacaan transkrip, metadata lampiran, perilaku antrean event live, routing pengiriman outbound, serta notifikasi channel + izin gaya Claude melalui bridge stdio nyata. Assertion notifikasi Claude membaca frame MCP stdio mentah secara langsung sehingga smoke benar-benar mencerminkan apa yang dipancarkan bridge.
- `pnpm test:docker:all`: Membangun image live-test bersama dan image Docker E2E satu kali, lalu menjalankan lane smoke Docker dengan `OPENCLAW_SKIP_DOCKER_BUILD=1` pada konkurensi 4 secara default. Sesuaikan dengan `OPENCLAW_DOCKER_ALL_PARALLELISM=<n>`. Runner berhenti menjadwalkan lane pooled baru setelah kegagalan pertama kecuali `OPENCLAW_DOCKER_ALL_FAIL_FAST=0` disetel, dan setiap lane memiliki timeout 120 menit yang dapat dioverride dengan `OPENCLAW_DOCKER_ALL_LANE_TIMEOUT_MS`. Lane yang sensitif terhadap startup atau provider dijalankan secara eksklusif setelah pool paralel. Log per-lane ditulis di bawah `.artifacts/docker-tests/<run-id>/`.
- `pnpm test:docker:openwebui`: Menjalankan OpenClaw + Open WebUI dalam Docker, masuk melalui Open WebUI, memeriksa `/api/models`, lalu menjalankan chat proxied nyata melalui `/api/chat/completions`. Memerlukan live model key yang dapat digunakan (misalnya OpenAI di `~/.profile`), menarik image Open WebUI eksternal, dan tidak diharapkan stabil di CI seperti suite unit/e2e normal.
- `pnpm test:docker:mcp-channels`: Menjalankan container Gateway yang sudah disemai dan container klien kedua yang memunculkan `openclaw mcp serve`, lalu memverifikasi penemuan percakapan yang dirutekan, pembacaan transkrip, metadata lampiran, perilaku antrean event live, perutean pengiriman keluar, serta notifikasi channel + izin bergaya Claude melalui bridge stdio nyata. Asersi notifikasi Claude membaca frame MCP stdio mentah secara langsung sehingga smoke test mencerminkan apa yang benar-benar dipancarkan oleh bridge.
## Gate PR lokal
Untuk pemeriksaan gate/landing PR lokal, jalankan:
Untuk pemeriksaan land/gate PR lokal, jalankan:
- `pnpm check:changed`
- `pnpm check`
@ -53,7 +54,7 @@ Untuk pemeriksaan gate/landing PR lokal, jalankan:
- `pnpm test`
- `pnpm check:docs`
Jika `pnpm test` flaky pada host yang sibuk, jalankan ulang sekali sebelum menganggapnya regresi, lalu isolasi dengan `pnpm test <path/to/test>`. Untuk host dengan keterbatasan memori, gunakan:
Jika `pnpm test` flake pada host yang sibuk, jalankan ulang sekali sebelum menganggapnya sebagai regresi, lalu isolasi dengan `pnpm test <path/to/test>`. Untuk host dengan keterbatasan memori, gunakan:
- `OPENCLAW_VITEST_MAX_WORKERS=1 pnpm test`
- `OPENCLAW_VITEST_FS_MODULE_CACHE_PATH=/tmp/openclaw-vitest-cache pnpm test:changed`
@ -106,9 +107,9 @@ Konvensi output tersimpan:
- `pnpm test:startup:bench:smoke` menulis artefak smoke terarah di `.artifacts/cli-startup-bench-smoke.json`
- `pnpm test:startup:bench:save` menulis artefak suite penuh di `.artifacts/cli-startup-bench-all.json` menggunakan `runs=5` dan `warmup=1`
- `pnpm test:startup:bench:update` menyegarkan fixture baseline yang di-commit di `test/fixtures/cli-startup-bench.json` menggunakan `runs=5` dan `warmup=1`
- `pnpm test:startup:bench:update` menyegarkan fixture baseline yang di-check-in di `test/fixtures/cli-startup-bench.json` menggunakan `runs=5` dan `warmup=1`
Fixture yang di-commit:
Fixture yang di-check-in:
- `test/fixtures/cli-startup-bench.json`
- Segarkan dengan `pnpm test:startup:bench:update`
@ -116,19 +117,19 @@ Fixture yang di-commit:
## Onboarding E2E (Docker)
Docker bersifat opsional; ini hanya diperlukan untuk smoke test onboarding tercontainer.
Docker bersifat opsional; ini hanya diperlukan untuk smoke test onboarding dalam container.
Alur cold-start penuh di container Linux bersih:
Alur cold-start penuh dalam container Linux bersih:
```bash
scripts/e2e/onboard-docker.sh
```
Skrip ini mengendalikan wizard interaktif melalui pseudo-tty, memverifikasi file config/workspace/session, lalu memulai gateway dan menjalankan `openclaw health`.
Skrip ini menjalankan wizard interaktif melalui pseudo-tty, memverifikasi file config/workspace/session, lalu memulai gateway dan menjalankan `openclaw health`.
## Smoke impor QR (Docker)
## Smoke test impor QR (Docker)
Memastikan `qrcode-terminal` dimuat di runtime Node Docker yang didukung (default Node 24, kompatibel dengan Node 22):
Memastikan `qrcode-terminal` dimuat di runtime Docker Node yang didukung (default Node 24, kompatibel dengan Node 22):
```bash
pnpm test:docker:qr

View File

@ -1,30 +1,30 @@
---
read_when:
- Menghasilkan gambar melalui agent
- Mengonfigurasi provider dan model generasi gambar
- Memahami parameter tool image_generate
summary: Hasilkan dan edit gambar menggunakan provider yang dikonfigurasi (OpenAI, Google Gemini, fal, MiniMax, ComfyUI, Vydra, xAI)
title: Generasi Gambar
- Membuat gambar melalui agen
- Mengonfigurasi penyedia dan model pembuatan gambar
- Memahami parameter alat `image_generate`
summary: Buat dan edit gambar menggunakan penyedia yang dikonfigurasi (OpenAI, Google Gemini, fal, MiniMax, ComfyUI, Vydra, xAI)
title: Pembuatan Gambar
x-i18n:
generated_at: "2026-04-23T09:28:47Z"
generated_at: "2026-04-23T13:58:13Z"
model: gpt-5.4
provider: openai
source_hash: 228049c74dd3437544cda6418da665aed375c0494ef36a6927d15c28d7783bbd
source_hash: 0fbd8eda2cb0867d1426b9349f6778c231051d600ebe451534efbee0e215c871
source_path: tools/image-generation.md
workflow: 15
---
# Generasi Gambar
# Pembuatan Gambar
Tool `image_generate` memungkinkan agent membuat dan mengedit gambar menggunakan provider yang Anda konfigurasi. Gambar yang dihasilkan dikirim secara otomatis sebagai lampiran media dalam balasan agent.
Alat `image_generate` memungkinkan agen membuat dan mengedit gambar menggunakan penyedia yang Anda konfigurasi. Gambar yang dihasilkan dikirim otomatis sebagai lampiran media dalam balasan agen.
<Note>
Tool ini hanya muncul saat setidaknya satu provider generasi gambar tersedia. Jika Anda tidak melihat `image_generate` di tool agent Anda, konfigurasikan `agents.defaults.imageGenerationModel` atau siapkan API key provider.
Alat ini hanya muncul ketika setidaknya satu penyedia pembuatan gambar tersedia. Jika Anda tidak melihat `image_generate` di alat agen Anda, konfigurasikan `agents.defaults.imageGenerationModel` atau siapkan kunci API penyedia.
</Note>
## Mulai cepat
1. Tetapkan API key untuk setidaknya satu provider (misalnya `OPENAI_API_KEY` atau `GEMINI_API_KEY`).
1. Tetapkan kunci API untuk setidaknya satu penyedia (misalnya `OPENAI_API_KEY` atau `GEMINI_API_KEY`).
2. Secara opsional tetapkan model pilihan Anda:
```json5
@ -39,46 +39,46 @@ Tool ini hanya muncul saat setidaknya satu provider generasi gambar tersedia. Ji
}
```
3. Minta agent: _"Buatkan gambar maskot lobster yang ramah."_
3. Minta agen: _"Buat gambar maskot lobster yang ramah."_
Agent akan memanggil `image_generate` secara otomatis. Tidak perlu allow-listing tool — tool ini aktif secara default saat provider tersedia.
Agen memanggil `image_generate` secara otomatis. Tidak perlu daftar izin alat — ini diaktifkan secara default ketika penyedia tersedia.
## Provider yang didukung
## Penyedia yang didukung
| Provider | Model default | Dukungan edit | API key |
| -------- | -------------------------------- | ---------------------------------- | ----------------------------------------------------- |
| OpenAI | `gpt-image-2` | Ya (hingga 5 gambar) | `OPENAI_API_KEY` |
| Google | `gemini-3.1-flash-image-preview` | Ya | `GEMINI_API_KEY` atau `GOOGLE_API_KEY` |
| fal | `fal-ai/flux/dev` | Ya | `FAL_KEY` |
| Penyedia | Model default | Dukungan edit | Kunci API |
| -------- | -------------------------------- | ---------------------------------- | ------------------------------------------------------ |
| OpenAI | `gpt-image-2` | Ya (hingga 5 gambar) | `OPENAI_API_KEY` |
| Google | `gemini-3.1-flash-image-preview` | Ya | `GEMINI_API_KEY` atau `GOOGLE_API_KEY` |
| fal | `fal-ai/flux/dev` | Ya | `FAL_KEY` |
| MiniMax | `image-01` | Ya (referensi subjek) | `MINIMAX_API_KEY` atau OAuth MiniMax (`minimax-portal`) |
| ComfyUI | `workflow` | Ya (1 gambar, dikonfigurasi workflow) | `COMFY_API_KEY` atau `COMFY_CLOUD_API_KEY` untuk cloud |
| Vydra | `grok-imagine` | Tidak | `VYDRA_API_KEY` |
| xAI | `grok-imagine-image` | Ya (hingga 5 gambar) | `XAI_API_KEY` |
| Vydra | `grok-imagine` | Tidak | `VYDRA_API_KEY` |
| xAI | `grok-imagine-image` | Ya (hingga 5 gambar) | `XAI_API_KEY` |
Gunakan `action: "list"` untuk memeriksa provider dan model yang tersedia saat runtime:
Gunakan `action: "list"` untuk memeriksa penyedia dan model yang tersedia saat runtime:
```
/tool image_generate action=list
```
## Parameter tool
## Parameter alat
| Parameter | Tipe | Deskripsi |
| ------------- | -------- | ------------------------------------------------------------------------------------ |
| `prompt` | string | Prompt generasi gambar (wajib untuk `action: "generate"`) |
| `action` | string | `"generate"` (default) atau `"list"` untuk memeriksa provider |
| `model` | string | Override provider/model, misalnya `openai/gpt-image-2` |
| `image` | string | Path atau URL gambar referensi tunggal untuk mode edit |
| `images` | string[] | Banyak gambar referensi untuk mode edit (hingga 5) |
| `prompt` | string | Prompt pembuatan gambar (wajib untuk `action: "generate"`) |
| `action` | string | `"generate"` (default) atau `"list"` untuk memeriksa penyedia |
| `model` | string | Override penyedia/model, misalnya `openai/gpt-image-2` |
| `image` | string | Jalur atau URL gambar referensi tunggal untuk mode edit |
| `images` | string[] | Beberapa gambar referensi untuk mode edit (hingga 5) |
| `size` | string | Petunjuk ukuran: `1024x1024`, `1536x1024`, `1024x1536`, `2048x2048`, `3840x2160` |
| `aspectRatio` | string | Rasio aspek: `1:1`, `2:3`, `3:2`, `3:4`, `4:3`, `4:5`, `5:4`, `9:16`, `16:9`, `21:9` |
| `resolution` | string | Petunjuk resolusi: `1K`, `2K`, atau `4K` |
| `count` | number | Jumlah gambar yang akan dihasilkan (14) |
| `count` | number | Jumlah gambar yang akan dibuat (14) |
| `filename` | string | Petunjuk nama file output |
Tidak semua provider mendukung semua parameter. Saat provider fallback mendukung opsi geometri yang dekat alih-alih yang diminta secara persis, OpenClaw memetakan ulang ke ukuran, rasio aspek, atau resolusi yang paling dekat didukung sebelum pengiriman. Override yang benar-benar tidak didukung tetap dilaporkan dalam hasil tool.
Tidak semua penyedia mendukung semua parameter. Ketika penyedia fallback mendukung opsi geometri yang mirip alih-alih yang diminta secara tepat, OpenClaw memetakan ulang ke ukuran, rasio aspek, atau resolusi terdekat yang didukung sebelum pengiriman. Override yang benar-benar tidak didukung tetap dilaporkan dalam hasil alat.
Hasil tool melaporkan pengaturan yang diterapkan. Saat OpenClaw memetakan ulang geometri selama fallback provider, nilai `size`, `aspectRatio`, dan `resolution` yang dikembalikan mencerminkan apa yang benar-benar dikirim, dan `details.normalization` menangkap terjemahan dari yang diminta ke yang diterapkan.
Hasil alat melaporkan pengaturan yang diterapkan. Ketika OpenClaw memetakan ulang geometri selama fallback penyedia, nilai `size`, `aspectRatio`, dan `resolution` yang dikembalikan mencerminkan apa yang benar-benar dikirim, dan `details.normalization` menangkap translasi dari yang diminta ke yang diterapkan.
## Konfigurasi
@ -97,86 +97,90 @@ Hasil tool melaporkan pengaturan yang diterapkan. Saat OpenClaw memetakan ulang
}
```
### Urutan pemilihan provider
### Urutan pemilihan penyedia
Saat menghasilkan gambar, OpenClaw mencoba provider dalam urutan ini:
Saat membuat gambar, OpenClaw mencoba penyedia dalam urutan ini:
1. Parameter **`model`** dari panggilan tool (jika agent menentukannya)
2. **`imageGenerationModel.primary`** dari konfigurasi
3. **`imageGenerationModel.fallbacks`** sesuai urutan
4. **Deteksi otomatis** — hanya menggunakan default provider yang didukung auth:
- provider default saat ini terlebih dahulu
- provider generasi gambar terdaftar lainnya yang tersisa menurut urutan provider-id
1. Parameter **`model`** dari pemanggilan alat (jika agen menentukannya)
2. **`imageGenerationModel.primary`** dari config
3. **`imageGenerationModel.fallbacks`** secara berurutan
4. **Deteksi otomatis** — hanya menggunakan default penyedia yang didukung auth:
- default penyedia saat ini terlebih dahulu
- penyedia pembuatan gambar terdaftar lainnya yang tersisa dalam urutan provider-id
Jika provider gagal (error auth, rate limit, dll.), kandidat berikutnya dicoba secara otomatis. Jika semuanya gagal, error akan menyertakan detail dari setiap percobaan.
Jika penyedia gagal (kesalahan auth, batas laju, dll.), kandidat berikutnya dicoba secara otomatis. Jika semuanya gagal, kesalahan akan mencakup detail dari setiap percobaan.
Catatan:
- Deteksi otomatis sadar auth. Default provider hanya masuk ke daftar kandidat
saat OpenClaw benar-benar dapat mengautentikasi provider tersebut.
- Deteksi otomatis aktif secara default. Tetapkan
`agents.defaults.mediaGenerationAutoProviderFallback: false` jika Anda ingin generasi gambar
- Deteksi otomatis sadar-auth. Default penyedia hanya masuk ke daftar kandidat
ketika OpenClaw benar-benar dapat mengautentikasi penyedia tersebut.
- Deteksi otomatis diaktifkan secara default. Tetapkan
`agents.defaults.mediaGenerationAutoProviderFallback: false` jika Anda ingin pembuatan gambar
hanya menggunakan entri `model`, `primary`, dan `fallbacks`
yang eksplisit.
- Gunakan `action: "list"` untuk memeriksa provider yang saat ini terdaftar,
model defaultnya, dan petunjuk env-var auth.
- Gunakan `action: "list"` untuk memeriksa penyedia yang saat ini terdaftar, model
default mereka, dan petunjuk env-var auth.
### Pengeditan gambar
OpenAI, Google, fal, MiniMax, ComfyUI, dan xAI mendukung pengeditan gambar referensi. Berikan path atau URL gambar referensi:
OpenAI, Google, fal, MiniMax, ComfyUI, dan xAI mendukung pengeditan gambar referensi. Berikan jalur atau URL gambar referensi:
```
"Buat versi cat air dari foto ini" + image: "/path/to/photo.jpg"
"Generate a watercolor version of this photo" + image: "/path/to/photo.jpg"
```
OpenAI, Google, dan xAI mendukung hingga 5 gambar referensi melalui parameter `images`. fal, MiniMax, dan ComfyUI mendukung 1.
### OpenAI `gpt-image-2`
Generasi gambar OpenAI secara default menggunakan `openai/gpt-image-2`. Model
lama `openai/gpt-image-1` masih dapat dipilih secara eksplisit, tetapi permintaan
generasi gambar dan pengeditan gambar OpenAI yang baru sebaiknya menggunakan `gpt-image-2`.
Pembuatan gambar OpenAI secara default menggunakan `openai/gpt-image-2`. Model
`openai/gpt-image-1` yang lebih lama masih dapat dipilih secara eksplisit, tetapi permintaan OpenAI baru
untuk pembuatan gambar dan pengeditan gambar sebaiknya menggunakan `gpt-image-2`.
`gpt-image-2` mendukung generasi text-to-image dan
pengeditan gambar referensi melalui tool `image_generate` yang sama. OpenClaw meneruskan `prompt`,
`gpt-image-2` mendukung pembuatan teks-ke-gambar dan pengeditan
gambar referensi melalui alat `image_generate` yang sama. OpenClaw meneruskan `prompt`,
`count`, `size`, dan gambar referensi ke OpenAI. OpenAI tidak menerima
`aspectRatio` atau `resolution` secara langsung; jika memungkinkan OpenClaw memetakan keduanya ke `size`
yang didukung, jika tidak tool akan melaporkannya sebagai override yang diabaikan.
`aspectRatio` atau `resolution` secara langsung; jika memungkinkan OpenClaw memetakan itu ke
`size` yang didukung, jika tidak alat akan melaporkannya sebagai override yang diabaikan.
Hasilkan satu gambar lanskap 4K:
Buat satu gambar lanskap 4K:
```
/tool image_generate action=generate model=openai/gpt-image-2 prompt="Poster editorial bersih untuk generasi gambar OpenClaw" size=3840x2160 count=1
/tool image_generate action=generate model=openai/gpt-image-2 prompt="A clean editorial poster for OpenClaw image generation" size=3840x2160 count=1
```
Hasilkan dua gambar persegi:
Buat dua gambar persegi:
```
/tool image_generate action=generate model=openai/gpt-image-2 prompt="Dua arah visual untuk ikon aplikasi produktivitas yang tenang" size=1024x1024 count=2
/tool image_generate action=generate model=openai/gpt-image-2 prompt="Two visual directions for a calm productivity app icon" size=1024x1024 count=2
```
Edit satu gambar referensi lokal:
```
/tool image_generate action=generate model=openai/gpt-image-2 prompt="Pertahankan subjeknya, ganti latar belakang dengan set studio terang" image=/path/to/reference.png size=1024x1536
/tool image_generate action=generate model=openai/gpt-image-2 prompt="Keep the subject, replace the background with a bright studio setup" image=/path/to/reference.png size=1024x1536
```
Edit dengan beberapa referensi:
```
/tool image_generate action=generate model=openai/gpt-image-2 prompt="Gabungkan identitas karakter dari gambar pertama dengan palet warna dari gambar kedua" images='["/path/to/character.png","/path/to/palette.jpg"]' size=1536x1024
/tool image_generate action=generate model=openai/gpt-image-2 prompt="Combine the character identity from the first image with the color palette from the second" images='["/path/to/character.png","/path/to/palette.jpg"]' size=1536x1024
```
Generasi gambar MiniMax tersedia melalui kedua jalur auth MiniMax bawaan:
Untuk mengarahkan pembuatan gambar OpenAI melalui deployment Azure OpenAI
alih-alih `api.openai.com`, lihat [endpoint Azure OpenAI](/id/providers/openai#azure-openai-endpoints)
di dokumentasi penyedia OpenAI.
- `minimax/image-01` untuk penyiapan API key
Pembuatan gambar MiniMax tersedia melalui kedua jalur auth MiniMax bawaan:
- `minimax/image-01` untuk penyiapan kunci API
- `minimax-portal/image-01` untuk penyiapan OAuth
## Kemampuan provider
## Kemampuan penyedia
| Kemampuan | OpenAI | Google | fal | MiniMax | ComfyUI | Vydra | xAI |
| Kemampuan | OpenAI | Google | fal | MiniMax | ComfyUI | Vydra | xAI |
| --------------------- | -------------------- | -------------------- | ------------------- | -------------------------- | ---------------------------------- | ------- | -------------------- |
| Generate | Ya (hingga 4) | Ya (hingga 4) | Ya (hingga 4) | Ya (hingga 9) | Ya (output ditentukan workflow) | Ya (1) | Ya (hingga 4) |
| Buat | Ya (hingga 4) | Ya (hingga 4) | Ya (hingga 4) | Ya (hingga 9) | Ya (output ditentukan workflow) | Ya (1) | Ya (hingga 4) |
| Edit/referensi | Ya (hingga 5 gambar) | Ya (hingga 5 gambar) | Ya (1 gambar) | Ya (1 gambar, referensi subjek) | Ya (1 gambar, dikonfigurasi workflow) | Tidak | Ya (hingga 5 gambar) |
| Kontrol ukuran | Ya (hingga 4K) | Ya | Ya | Tidak | Tidak | Tidak | Tidak |
| Rasio aspek | Tidak | Ya | Ya (hanya generate) | Ya | Tidak | Tidak | Ya |
@ -184,8 +188,8 @@ Generasi gambar MiniMax tersedia melalui kedua jalur auth MiniMax bawaan:
### xAI `grok-imagine-image`
Provider xAI bawaan menggunakan `/v1/images/generations` untuk permintaan hanya prompt
dan `/v1/images/edits` saat `image` atau `images` ada.
Penyedia xAI bawaan menggunakan `/v1/images/generations` untuk permintaan
khusus prompt dan `/v1/images/edits` ketika `image` atau `images` ada.
- Model: `xai/grok-imagine-image`, `xai/grok-imagine-image-pro`
- Jumlah: hingga 4
@ -194,19 +198,19 @@ dan `/v1/images/edits` saat `image` atau `images` ada.
- Resolusi: `1K`, `2K`
- Output: dikembalikan sebagai lampiran gambar yang dikelola OpenClaw
OpenClaw sengaja tidak mengekspos `quality`, `mask`, `user`, atau
rasio aspek native tambahan khusus xAI sampai kontrol tersebut ada dalam kontrak
lintas-provider `image_generate` bersama.
OpenClaw secara sengaja tidak mengekspos `quality`, `mask`, `user`, atau
rasio aspek tambahan khusus-native milik xAI sampai kontrol tersebut tersedia dalam kontrak
bersama lintas-penyedia `image_generate`.
## Terkait
- [Ringkasan Tools](/id/tools) — semua tool agent yang tersedia
- [fal](/id/providers/fal) — penyiapan provider gambar dan video fal
- [Ikhtisar Alat](/id/tools) — semua alat agen yang tersedia
- [fal](/id/providers/fal) — penyiapan penyedia gambar dan video fal
- [ComfyUI](/id/providers/comfy) — penyiapan workflow ComfyUI lokal dan Comfy Cloud
- [Google (Gemini)](/id/providers/google) — penyiapan provider gambar Gemini
- [MiniMax](/id/providers/minimax) — penyiapan provider gambar MiniMax
- [OpenAI](/id/providers/openai) — penyiapan provider OpenAI Images
- [Vydra](/id/providers/vydra) — penyiapan gambar, video, dan speech Vydra
- [xAI](/id/providers/xai) — penyiapan gambar, video, pencarian, eksekusi kode, dan TTS Grok
- [Referensi Konfigurasi](/id/gateway/configuration-reference#agent-defaults) — konfigurasi `imageGenerationModel`
- [Google (Gemini)](/id/providers/google) — penyiapan penyedia gambar Gemini
- [MiniMax](/id/providers/minimax) — penyiapan penyedia gambar MiniMax
- [OpenAI](/id/providers/openai) — penyiapan penyedia OpenAI Images
- [Vydra](/id/providers/vydra) — penyiapan gambar, video, dan ucapan Vydra
- [xAI](/id/providers/xai) — penyiapan Grok image, video, search, code execution, dan TTS
- [Referensi Konfigurasi](/id/gateway/configuration-reference#agent-defaults) — config `imageGenerationModel`
- [Models](/id/concepts/models) — konfigurasi model dan failover

View File

@ -1,27 +1,27 @@
---
read_when:
- Menginstal atau mengonfigurasi plugin
- Memahami aturan penemuan dan pemuatan plugin
- Memahami penemuan plugin dan aturan pemuatan
- Bekerja dengan bundel plugin yang kompatibel dengan Codex/Claude
sidebarTitle: Install and Configure
summary: Instal, konfigurasi, dan kelola plugin OpenClaw
summary: Instal, konfigurasikan, dan kelola plugin OpenClaw
title: Plugin
x-i18n:
generated_at: "2026-04-23T09:29:08Z"
generated_at: "2026-04-23T13:58:13Z"
model: gpt-5.4
provider: openai
source_hash: dc944b53654552ca5cf6132c6ef16c71745a7bffc249daccaee40c513e04209c
source_hash: 63aa1b5ed9e3aaa2117b78137a457582b00ea47d94af7da3780ddae38e8e3665
source_path: tools/plugin.md
workflow: 15
---
# Plugin
Plugin memperluas OpenClaw dengan kapabilitas baru: channel, provider model,
tool, Skills, speech, transkripsi realtime, voice realtime,
pemahaman media, pembuatan gambar, pembuatan video, web fetch, web
search, dan lainnya. Beberapa plugin bersifat **core** (dikirim bersama OpenClaw), yang lain
bersifat **external** (dipublikasikan di npm oleh komunitas).
Plugin memperluas OpenClaw dengan kemampuan baru: channel, penyedia model,
alat, Skills, ucapan, transkripsi realtime, suara realtime,
pemahaman media, pembuatan gambar, pembuatan video, pengambilan web, pencarian web,
dan lainnya. Beberapa plugin bersifat **inti** (dikirim bersama OpenClaw), yang lain
bersifat **eksternal** (dipublikasikan di npm oleh komunitas).
## Mulai cepat
@ -44,17 +44,17 @@ bersifat **external** (dipublikasikan di npm oleh komunitas).
</Step>
<Step title="Restart Gateway">
<Step title="Mulai ulang Gateway">
```bash
openclaw gateway restart
```
Lalu konfigurasikan di bawah `plugins.entries.\<id\>.config` di file config Anda.
Lalu konfigurasikan di bawah `plugins.entries.\<id\>.config` dalam file konfigurasi Anda.
</Step>
</Steps>
Jika Anda lebih suka kontrol native-chat, aktifkan `commands.plugins: true` dan gunakan:
Jika Anda lebih memilih kontrol yang native untuk chat, aktifkan `commands.plugins: true` dan gunakan:
```text
/plugin install clawhub:@openclaw/voice-call
@ -62,31 +62,30 @@ Jika Anda lebih suka kontrol native-chat, aktifkan `commands.plugins: true` dan
/plugin enable voice-call
```
Jalur instalasi menggunakan resolver yang sama seperti CLI: path/arsip lokal, `clawhub:<pkg>`
eksplisit, atau spesifikasi package polos (ClawHub terlebih dahulu, lalu fallback npm).
Jalur instalasi menggunakan resolver yang sama seperti CLI: path/arsip lokal, `clawhub:<pkg>` eksplisit, atau spesifikasi paket biasa (ClawHub terlebih dahulu, lalu fallback ke npm).
Jika config tidak valid, instalasi biasanya gagal tertutup dan mengarahkan Anda ke
`openclaw doctor --fix`. Satu-satunya pengecualian pemulihan adalah jalur instal ulang plugin bawaan yang sempit
untuk plugin yang ikut serta dalam
Jika konfigurasi tidak valid, instalasi biasanya gagal secara aman dan mengarahkan Anda ke
`openclaw doctor --fix`. Satu-satunya pengecualian pemulihan adalah jalur reinstalasi plugin bawaan yang sempit
untuk plugin yang memilih masuk ke
`openclaw.install.allowInvalidConfigRecovery`.
Instalasi OpenClaw yang dipaketkan tidak langsung menginstal seluruh pohon
dependensi runtime setiap plugin bawaan. Ketika plugin milik OpenClaw bawaan aktif dari
config plugin, config channel lama, atau manifest yang aktif secara default, startup
hanya memperbaiki dependensi runtime yang dideklarasikan oleh plugin tersebut sebelum mengimpornya.
Plugin external dan load path kustom tetap harus diinstal melalui
Instalasi OpenClaw yang dipaketkan tidak langsung menginstal seluruh pohon dependensi runtime untuk setiap plugin bawaan.
Saat plugin bawaan milik OpenClaw aktif dari
konfigurasi plugin, konfigurasi channel lama, atau manifest yang aktif secara default, startup
hanya memperbaiki dependensi runtime yang dideklarasikan plugin tersebut sebelum mengimpornya.
Plugin eksternal dan jalur muat kustom tetap harus diinstal melalui
`openclaw plugins install`.
## Jenis plugin
OpenClaw mengenali dua format plugin:
| Format | Cara kerjanya | Contoh |
| Format | Cara kerjanya | Contoh |
| ---------- | ---------------------------------------------------------------- | ------------------------------------------------------ |
| **Native** | `openclaw.plugin.json` + modul runtime; dieksekusi in-process | Plugin resmi, package npm komunitas |
| **Bundle** | Layout yang kompatibel dengan Codex/Claude/Cursor; dipetakan ke fitur OpenClaw | `.codex-plugin/`, `.claude-plugin/`, `.cursor-plugin/` |
| **Native** | `openclaw.plugin.json` + modul runtime; berjalan di dalam proses | Plugin resmi, paket npm komunitas |
| **Bundle** | Tata letak yang kompatibel dengan Codex/Claude/Cursor; dipetakan ke fitur OpenClaw | `.codex-plugin/`, `.claude-plugin/`, `.cursor-plugin/` |
Keduanya muncul di bawah `openclaw plugins list`. Lihat [Plugin Bundles](/id/plugins/bundles) untuk detail bundle.
Keduanya muncul di `openclaw plugins list`. Lihat [Plugin Bundles](/id/plugins/bundles) untuk detail bundle.
Jika Anda menulis plugin native, mulai dari [Building Plugins](/id/plugins/building-plugins)
dan [Plugin SDK Overview](/id/plugins/sdk-overview).
@ -95,7 +94,7 @@ dan [Plugin SDK Overview](/id/plugins/sdk-overview).
### Dapat diinstal (npm)
| Plugin | Package | Docs |
| Plugin | Paket | Dokumen |
| --------------- | ---------------------- | ------------------------------------ |
| Matrix | `@openclaw/matrix` | [Matrix](/id/channels/matrix) |
| Microsoft Teams | `@openclaw/msteams` | [Microsoft Teams](/id/channels/msteams) |
@ -104,10 +103,10 @@ dan [Plugin SDK Overview](/id/plugins/sdk-overview).
| Zalo | `@openclaw/zalo` | [Zalo](/id/channels/zalo) |
| Zalo Personal | `@openclaw/zalouser` | [Zalo Personal](/id/plugins/zalouser) |
### Core (dikirim bersama OpenClaw)
### Inti (dikirim bersama OpenClaw)
<AccordionGroup>
<Accordion title="Provider model (aktif secara default)">
<Accordion title="Penyedia model (diaktifkan secara default)">
`anthropic`, `byteplus`, `cloudflare-ai-gateway`, `github-copilot`, `google`,
`huggingface`, `kilocode`, `kimi-coding`, `minimax`, `mistral`, `qwen`,
`moonshot`, `nvidia`, `openai`, `opencode`, `opencode-go`, `openrouter`,
@ -117,16 +116,16 @@ dan [Plugin SDK Overview](/id/plugins/sdk-overview).
<Accordion title="Plugin memori">
- `memory-core` — pencarian memori bawaan (default melalui `plugins.slots.memory`)
- `memory-lancedb` — memori jangka panjang instal-sesuai-kebutuhan dengan auto-recall/capture (atur `plugins.slots.memory = "memory-lancedb"`)
- `memory-lancedb` — memori jangka panjang install-on-demand dengan auto-recall/capture (setel `plugins.slots.memory = "memory-lancedb"`)
</Accordion>
<Accordion title="Provider speech (aktif secara default)">
<Accordion title="Penyedia ucapan (diaktifkan secara default)">
`elevenlabs`, `microsoft`
</Accordion>
<Accordion title="Lainnya">
- `browser` — plugin browser bawaan untuk tool browser, CLI `openclaw browser`, method Gateway `browser.request`, runtime browser, dan layanan kontrol browser default (aktif secara default; nonaktifkan sebelum menggantinya)
- `copilot-proxy` — bridge VS Code Copilot Proxy (nonaktif secara default)
- `browser` — plugin browser bawaan untuk alat browser, CLI `openclaw browser`, metode Gateway `browser.request`, runtime browser, dan layanan kontrol browser default (diaktifkan secara default; nonaktifkan sebelum menggantinya)
- `copilot-proxy` — bridge VS Code Copilot Proxy (dinonaktifkan secara default)
</Accordion>
</AccordionGroup>
@ -148,32 +147,32 @@ Mencari plugin pihak ketiga? Lihat [Community Plugins](/id/plugins/community).
}
```
| Field | Description |
| Field | Deskripsi |
| ---------------- | --------------------------------------------------------- |
| `enabled` | Toggle utama (default: `true`) |
| `allow` | Allowlist plugin (opsional) |
| `deny` | Denylist plugin (opsional; deny menang) |
| `enabled` | Sakelar utama (default: `true`) |
| `allow` | Daftar izin plugin (opsional) |
| `deny` | Daftar blokir plugin (opsional; deny menang) |
| `load.paths` | File/direktori plugin tambahan |
| `slots` | Pemilih slot eksklusif (misalnya `memory`, `contextEngine`) |
| `entries.\<id\>` | Toggle + config per-plugin |
| `slots` | Pemilih slot eksklusif (mis. `memory`, `contextEngine`) |
| `entries.\<id\>` | Sakelar + konfigurasi per plugin |
Perubahan config **memerlukan restart Gateway**. Jika Gateway berjalan dengan config
watch + restart in-process diaktifkan (jalur default `openclaw gateway`), restart
tersebut biasanya dilakukan secara otomatis sesaat setelah penulisan config selesai.
Perubahan konfigurasi **memerlukan restart gateway**. Jika Gateway berjalan dengan pemantauan konfigurasi
+ restart dalam proses diaktifkan (jalur default `openclaw gateway`), restart
tersebut biasanya dilakukan secara otomatis sesaat setelah penulisan konfigurasi selesai.
<Accordion title="Status plugin: disabled vs missing vs invalid">
- **Disabled**: plugin ada tetapi aturan enablement mematikannya. Config dipertahankan.
- **Missing**: config merujuk ke ID plugin yang tidak ditemukan oleh discovery.
- **Invalid**: plugin ada tetapi config-nya tidak cocok dengan schema yang dideklarasikan.
<Accordion title="Status plugin: dinonaktifkan vs hilang vs tidak valid">
- **Disabled**: plugin ada tetapi aturan pengaktifan menonaktifkannya. Konfigurasi tetap dipertahankan.
- **Missing**: konfigurasi merujuk ke id plugin yang tidak ditemukan oleh discovery.
- **Invalid**: plugin ada tetapi konfigurasinya tidak cocok dengan skema yang dideklarasikan.
</Accordion>
## Discovery dan precedence
## Discovery dan prioritas
OpenClaw memindai plugin dalam urutan ini (kecocokan pertama menang):
OpenClaw memindai plugin dalam urutan berikut (kecocokan pertama menang):
<Steps>
<Step title="Path config">
`plugins.load.paths` — file atau path direktori eksplisit.
<Step title="Path konfigurasi">
`plugins.load.paths`path file atau direktori eksplisit.
</Step>
<Step title="Plugin workspace">
@ -185,46 +184,46 @@ OpenClaw memindai plugin dalam urutan ini (kecocokan pertama menang):
</Step>
<Step title="Plugin bawaan">
Dikirim bersama OpenClaw. Banyak yang aktif secara default (provider model, speech).
Yang lain memerlukan pengaktifan eksplisit.
Dikirim bersama OpenClaw. Banyak yang diaktifkan secara default (penyedia model, ucapan).
Yang lainnya memerlukan pengaktifan eksplisit.
</Step>
</Steps>
### Aturan enablement
### Aturan pengaktifan
- `plugins.enabled: false` menonaktifkan semua plugin
- `plugins.deny` selalu menang atas allow
- `plugins.entries.\<id\>.enabled: false` menonaktifkan plugin tersebut
- Plugin yang berasal dari workspace **nonaktif secara default** (harus diaktifkan secara eksplisit)
- Plugin bawaan mengikuti set default-on bawaan kecuali dioverride
- Slot eksklusif dapat memaksa plugin yang dipilih untuk slot tersebut menjadi aktif
- Plugin yang berasal dari workspace **dinonaktifkan secara default** (harus diaktifkan secara eksplisit)
- Plugin bawaan mengikuti kumpulan default aktif bawaan kecuali ditimpa
- Slot eksklusif dapat memaksa pengaktifan plugin yang dipilih untuk slot tersebut
## Slot plugin (kategori eksklusif)
Beberapa kategori bersifat eksklusif (hanya satu yang aktif dalam satu waktu):
Beberapa kategori bersifat eksklusif (hanya satu yang aktif pada satu waktu):
```json5
{
plugins: {
slots: {
memory: "memory-core", // atau "none" untuk menonaktifkan
contextEngine: "legacy", // atau ID plugin
contextEngine: "legacy", // atau id plugin
},
},
}
```
| Slot | Apa yang dikontrol | Default |
| --------------- | ----------------------- | ------------------- |
| `memory` | Plugin memori aktif | `memory-core` |
| `contextEngine` | Context engine aktif | `legacy` (bawaan) |
| Slot | Yang dikendalikan | Default |
| --------------- | -------------------------- | ------------------- |
| `memory` | Plugin memori aktif | `memory-core` |
| `contextEngine` | Mesin konteks aktif | `legacy` (bawaan) |
## Referensi CLI
```bash
openclaw plugins list # inventaris ringkas
openclaw plugins list --enabled # hanya plugin yang dimuat
openclaw plugins list --verbose # baris detail per-plugin
openclaw plugins list --verbose # baris detail per plugin
openclaw plugins list --json # inventaris yang dapat dibaca mesin
openclaw plugins inspect <id> # detail mendalam
openclaw plugins inspect <id> --json # dapat dibaca mesin
@ -239,12 +238,12 @@ openclaw plugins install <path> # instal dari path lokal
openclaw plugins install -l <path> # tautkan (tanpa salin) untuk dev
openclaw plugins install <plugin> --marketplace <source>
openclaw plugins install <plugin> --marketplace https://github.com/<owner>/<repo>
openclaw plugins install <spec> --pin # catat spesifikasi npm hasil resolve yang tepat
openclaw plugins install <spec> --pin # catat spesifikasi npm hasil resolusi yang tepat
openclaw plugins install <spec> --dangerously-force-unsafe-install
openclaw plugins update <id-or-npm-spec> # perbarui satu plugin
openclaw plugins update <id-or-npm-spec> --dangerously-force-unsafe-install
openclaw plugins update --all # perbarui semua
openclaw plugins uninstall <id> # hapus catatan config/instalasi
openclaw plugins uninstall <id> # hapus catatan konfigurasi/instalasi
openclaw plugins uninstall <id> --keep-files
openclaw plugins marketplace list <source>
openclaw plugins marketplace list <source> --json
@ -253,55 +252,59 @@ openclaw plugins enable <id>
openclaw plugins disable <id>
```
Plugin bawaan dikirim bersama OpenClaw. Banyak yang aktif secara default (misalnya
provider model bawaan, provider speech bawaan, dan plugin browser
bawaan). Plugin bawaan lainnya tetap memerlukan `openclaw plugins enable <id>`.
Plugin bawaan dikirim bersama OpenClaw. Banyak yang diaktifkan secara default (misalnya
penyedia model bawaan, penyedia ucapan bawaan, dan plugin browser bawaan).
Plugin bawaan lainnya tetap memerlukan `openclaw plugins enable <id>`.
`--force` menimpa plugin atau hook pack yang sudah terinstal di tempat. Gunakan
`--force` menimpa plugin atau paket hook yang sudah terinstal di tempatnya. Gunakan
`openclaw plugins update <id-or-npm-spec>` untuk upgrade rutin plugin npm
yang dilacak. Opsi ini tidak didukung dengan `--link`, yang menggunakan ulang source path alih-alih
menyalin ke target instalasi terkelola.
yang dilacak. Opsi ini tidak didukung dengan `--link`, yang menggunakan ulang path sumber alih-alih
menyalinnya ke target instalasi terkelola.
Saat `plugins.allow` sudah diatur, `openclaw plugins install` menambahkan
id plugin yang diinstal ke allowlist tersebut sebelum mengaktifkannya, sehingga instalasi
langsung dapat dimuat setelah restart.
`openclaw plugins update <id-or-npm-spec>` berlaku untuk instalasi yang dilacak. Memberikan
spesifikasi package npm dengan dist-tag atau versi tepat akan me-resolve nama package
kembali ke catatan plugin yang dilacak dan mencatat spesifikasi baru untuk pembaruan di masa depan.
Memberikan nama package tanpa versi akan memindahkan instalasi exact pinned kembali ke
jalur rilis default registry. Jika plugin npm yang terinstal sudah cocok
dengan versi hasil resolve dan identitas artefak yang tercatat, OpenClaw melewati update
tanpa mengunduh, menginstal ulang, atau menulis ulang config.
spesifikasi paket npm dengan dist-tag atau versi tepat akan me-resolve nama paket
kembali ke catatan plugin yang dilacak dan mencatat spesifikasi baru untuk pembaruan berikutnya.
Memberikan nama paket tanpa versi memindahkan instalasi exact pinned kembali ke
jalur rilis default registry. Jika plugin npm yang diinstal sudah cocok
dengan versi hasil resolusi dan identitas artefak yang tercatat, OpenClaw melewati pembaruan
tanpa mengunduh, menginstal ulang, atau menulis ulang konfigurasi.
`--pin` hanya untuk npm. Opsi ini tidak didukung dengan `--marketplace`, karena
instalasi marketplace menyimpan metadata sumber marketplace, bukan spesifikasi npm.
instalasi marketplace menyimpan metadata sumber marketplace alih-alih spesifikasi npm.
`--dangerously-force-unsafe-install` adalah override break-glass untuk false
positive dari pemindai kode berbahaya bawaan. Ini memungkinkan instalasi plugin
dan update plugin untuk tetap lanjut melewati temuan bawaan `critical`, tetapi tetap
tidak melewati blok kebijakan plugin `before_install` atau pemblokiran kegagalan pemindaian.
`--dangerously-force-unsafe-install` adalah override darurat untuk false
positive dari pemindai kode berbahaya bawaan. Opsi ini memungkinkan instalasi plugin
dan pembaruan plugin tetap berlanjut melewati temuan bawaan `critical`, tetapi tetap
tidak melewati blok kebijakan plugin `before_install` atau pemblokiran akibat kegagalan pemindaian.
Flag CLI ini hanya berlaku untuk alur instal/update plugin. Instalasi dependensi
skill yang didukung Gateway menggunakan override request `dangerouslyForceUnsafeInstall`
yang sesuai, sementara `openclaw skills install` tetap merupakan alur unduh/instal skill ClawHub yang terpisah.
Flag CLI ini hanya berlaku untuk alur instalasi/pembaruan plugin. Instalasi dependensi skill
yang didukung Gateway menggunakan override permintaan `dangerouslyForceUnsafeInstall` yang sesuai,
sedangkan `openclaw skills install` tetap merupakan alur unduh/instal skill ClawHub yang terpisah.
Bundle yang kompatibel ikut serta dalam alur `plugin list`/`inspect`/`enable`/`disable` yang sama.
Dukungan runtime saat ini mencakup Skills bundle, command-skills Claude,
default Claude `settings.json`, default Claude `.lsp.json` dan `lspServers`
yang dideklarasikan manifest, command-skills Cursor, serta direktori hook Codex yang kompatibel.
Bundle yang kompatibel berpartisipasi dalam alur list/inspect/enable/disable plugin yang sama.
Dukungan runtime saat ini mencakup bundle Skills, command-skills Claude,
default Claude `settings.json`, default Claude `.lsp.json` dan `lspServers` yang dideklarasikan manifest,
command-skills Cursor, dan direktori hook Codex yang kompatibel.
`openclaw plugins inspect <id>` juga melaporkan kapabilitas bundle yang terdeteksi serta
`openclaw plugins inspect <id>` juga melaporkan kemampuan bundle yang terdeteksi beserta
entri server MCP dan LSP yang didukung atau tidak didukung untuk plugin yang didukung bundle.
Sumber marketplace dapat berupa nama known-marketplace Claude dari
`~/.claude/plugins/known_marketplaces.json`, root marketplace lokal atau
path `marketplace.json`, shorthand GitHub seperti `owner/repo`, URL repo GitHub,
path `marketplace.json`, singkatan GitHub seperti `owner/repo`, URL repo GitHub,
atau URL git. Untuk marketplace remote, entri plugin harus tetap berada di dalam
repo marketplace yang dikloning dan hanya menggunakan sumber path relatif.
repo marketplace yang di-clone dan hanya menggunakan sumber path relatif.
Lihat referensi CLI [`openclaw plugins`](/id/cli/plugins) untuk detail lengkap.
## Gambaran API plugin
## Ringkasan API plugin
Plugin native mengekspor objek entri yang mengekspos `register(api)`. Plugin
lama mungkin masih menggunakan `activate(api)` sebagai alias lama, tetapi plugin baru sebaiknya
lama mungkin masih menggunakan `activate(api)` sebagai alias lawas, tetapi plugin baru harus
menggunakan `register`.
```typescript
@ -323,39 +326,39 @@ export default definePluginEntry({
```
OpenClaw memuat objek entri dan memanggil `register(api)` selama aktivasi
plugin. Loader masih fallback ke `activate(api)` untuk plugin lama,
tetapi plugin bawaan dan plugin external baru sebaiknya memperlakukan `register` sebagai
plugin. Loader masih menggunakan `activate(api)` sebagai fallback untuk plugin lama,
tetapi plugin bawaan dan plugin eksternal baru harus memperlakukan `register` sebagai
kontrak publik.
Metode pendaftaran umum:
| Method | Yang didaftarkan |
| --------------------------------------- | --------------------------- |
| `registerProvider` | Provider model (LLM) |
| `registerProvider` | Penyedia model (LLM) |
| `registerChannel` | Channel chat |
| `registerTool` | Tool agent |
| `registerTool` | Alat agen |
| `registerHook` / `on(...)` | Hook siklus hidup |
| `registerSpeechProvider` | Text-to-speech / STT |
| `registerRealtimeTranscriptionProvider` | STT streaming |
| `registerRealtimeVoiceProvider` | Voice realtime duplex |
| `registerRealtimeVoiceProvider` | Suara realtime dupleks |
| `registerMediaUnderstandingProvider` | Analisis gambar/audio |
| `registerImageGenerationProvider` | Pembuatan gambar |
| `registerMusicGenerationProvider` | Pembuatan musik |
| `registerVideoGenerationProvider` | Pembuatan video |
| `registerWebFetchProvider` | Provider web fetch / scrape |
| `registerWebFetchProvider` | Penyedia pengambilan / scrape web |
| `registerWebSearchProvider` | Pencarian web |
| `registerHttpRoute` | Endpoint HTTP |
| `registerCommand` / `registerCli` | Perintah CLI |
| `registerContextEngine` | Context engine |
| `registerContextEngine` | Mesin konteks |
| `registerService` | Layanan latar belakang |
Perilaku guard hook untuk hook siklus hidup bertipe:
- `before_tool_call`: `{ block: true }` bersifat terminal; handler prioritas lebih rendah dilewati.
- `before_tool_call`: `{ block: false }` adalah no-op dan tidak menghapus blok sebelumnya.
- `before_install`: `{ block: true }` bersifat terminal; handler prioritas lebih rendah dilewati.
- `before_install`: `{ block: false }` adalah no-op dan tidak menghapus blok sebelumnya.
- `message_sending`: `{ cancel: true }` bersifat terminal; handler prioritas lebih rendah dilewati.
- `before_tool_call`: `{ block: true }` bersifat terminal; handler dengan prioritas lebih rendah dilewati.
- `before_tool_call`: `{ block: false }` adalah no-op dan tidak menghapus block sebelumnya.
- `before_install`: `{ block: true }` bersifat terminal; handler dengan prioritas lebih rendah dilewati.
- `before_install`: `{ block: false }` adalah no-op dan tidak menghapus block sebelumnya.
- `message_sending`: `{ cancel: true }` bersifat terminal; handler dengan prioritas lebih rendah dilewati.
- `message_sending`: `{ cancel: false }` adalah no-op dan tidak menghapus cancel sebelumnya.
Untuk perilaku hook bertipe lengkap, lihat [SDK Overview](/id/plugins/sdk-overview#hook-decision-semantics).
@ -364,7 +367,7 @@ Untuk perilaku hook bertipe lengkap, lihat [SDK Overview](/id/plugins/sdk-overvi
- [Building Plugins](/id/plugins/building-plugins) — buat plugin Anda sendiri
- [Plugin Bundles](/id/plugins/bundles) — kompatibilitas bundle Codex/Claude/Cursor
- [Plugin Manifest](/id/plugins/manifest) — schema manifest
- [Registering Tools](/id/plugins/building-plugins#registering-agent-tools) — tambahkan tool agent dalam plugin
- [Plugin Manifest](/id/plugins/manifest) — skema manifest
- [Registering Tools](/id/plugins/building-plugins#registering-agent-tools) — tambahkan alat agen dalam plugin
- [Plugin Internals](/id/plugins/architecture) — model kapabilitas dan pipeline pemuatan
- [Community Plugins](/id/plugins/community) — daftar pihak ketiga

View File

@ -2,35 +2,35 @@
read_when:
- Menggunakan atau mengonfigurasi perintah chat
- Men-debug perutean perintah atau izin
summary: 'Slash commands: teks vs native, konfigurasi, dan perintah yang didukung'
title: Slash Commands
summary: 'Perintah garis miring: teks vs native, konfigurasi, dan perintah yang didukung'
title: Perintah Garis Miring
x-i18n:
generated_at: "2026-04-23T09:29:24Z"
generated_at: "2026-04-23T13:58:13Z"
model: gpt-5.4
provider: openai
source_hash: 0f6b454afa77cf02b2c307efcc99ef35d002cb560c427affaf03ac12b2b666e8
source_hash: 13290dcdf649ae66603a92a0aca68460bb63ff476179cc2dded796aaa841d66c
source_path: tools/slash-commands.md
workflow: 15
---
# Slash Commands
# Perintah garis miring
Perintah ditangani oleh Gateway. Sebagian besar perintah harus dikirim sebagai pesan **mandiri** yang diawali dengan `/`.
Perintah chat bash khusus host menggunakan `! <cmd>` (dengan `/bash <cmd>` sebagai alias).
Ada dua sistem yang terkait:
- **Commands**: pesan mandiri `/...`.
- **Directives**: `/think`, `/fast`, `/verbose`, `/trace`, `/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** mem-persist pengaturan sesi.
- Dalam pesan yang hanya berisi directive (pesan hanya berisi directive), directive dipersist ke sesi dan membalas dengan acknowledgement.
- Directive hanya diterapkan untuk **pengirim yang diotorisasi**. Jika `commands.allowFrom` disetel, itulah satu-satunya
- **Perintah**: pesan `/...` mandiri.
- **Direktif**: `/think`, `/fast`, `/verbose`, `/trace`, `/reasoning`, `/elevated`, `/exec`, `/model`, `/queue`.
- Direktif dihapus dari pesan sebelum model melihatnya.
- Dalam pesan chat biasa (bukan hanya direktif), direktif diperlakukan sebagai “petunjuk inline” dan **tidak** mempertahankan pengaturan sesi.
- Dalam pesan yang hanya berisi direktif (pesan hanya berisi direktif), direktif dipertahankan ke sesi dan membalas dengan pengakuan.
- Direktif hanya diterapkan untuk **pengirim yang diizinkan**. Jika `commands.allowFrom` diatur, itu adalah satu-satunya
allowlist yang digunakan; jika tidak, otorisasi berasal dari allowlist/pairing channel ditambah `commands.useAccessGroups`.
Pengirim yang tidak diotorisasi akan melihat directive diperlakukan sebagai teks biasa.
Pengirim yang tidak diizinkan akan melihat direktif diperlakukan sebagai teks biasa.
Ada juga beberapa **shortcut inline** (hanya untuk pengirim yang diizinkan/diotorisasi): `/help`, `/commands`, `/status`, `/whoami` (`/id`).
Shortcut ini berjalan segera, dihapus sebelum model melihatnya, dan teks yang tersisa melanjutkan alur normal.
Ada juga beberapa **shortcut inline** (hanya pengirim yang di-allowlist/diizinkan): `/help`, `/commands`, `/status`, `/whoami` (`/id`).
Shortcut ini berjalan segera, dihapus sebelum model melihat pesan, dan sisa teks melanjutkan alur normal.
## Konfigurasi
@ -59,30 +59,30 @@ Shortcut ini berjalan segera, dihapus sebelum model melihatnya, dan teks yang te
}
```
- `commands.text` (default `true`) mengaktifkan parsing `/...` di pesan chat.
- Pada permukaan tanpa perintah native (WhatsApp/WebChat/Signal/iMessage/Google Chat/Microsoft Teams), perintah teks tetap berfungsi meskipun Anda menetapkan ini ke `false`.
- `commands.text` (default `true`) mengaktifkan parsing `/...` dalam pesan chat.
- Pada permukaan tanpa perintah native (WhatsApp/WebChat/Signal/iMessage/Google Chat/Microsoft Teams), perintah teks tetap berfungsi meskipun Anda mengaturnya 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"`).
- Atur `channels.discord.commands.native`, `channels.telegram.commands.native`, atau `channels.slack.commands.native` untuk menimpa per provider (bool atau `"auto"`).
- `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 **Skills** secara native saat didukung.
- Auto: aktif untuk Discord/Telegram; nonaktif untuk Slack (Slack mengharuskan membuat 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.nativeSkills` (default `"auto"`) mendaftarkan perintah **skill** secara native bila didukung.
- Auto: aktif untuk Discord/Telegram; nonaktif untuk Slack (Slack mengharuskan pembuatan satu slash command per skill).
- Atur `channels.discord.commands.nativeSkills`, `channels.telegram.commands.nativeSkills`, atau `channels.slack.commands.nativeSkills` untuk menimpa per provider (bool atau `"auto"`).
- `commands.bash` (default `false`) mengaktifkan `! <cmd>` untuk menjalankan perintah shell host (`/bash <cmd>` adalah alias; memerlukan allowlist `tools.elevated`).
- `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` (baca/tulis `openclaw.json`).
- `commands.mcp` (default `false`) mengaktifkan `/mcp` (baca/tulis konfigurasi MCP yang dikelola OpenClaw di bawah `mcp.servers`).
- `commands.plugins` (default `false`) mengaktifkan `/plugins` (discovery/status plugin plus kontrol install + enable/disable).
- `commands.debug` (default `false`) mengaktifkan `/debug` (override khusus runtime).
- `commands.bashForegroundMs` (default `2000`) mengontrol berapa lama bash menunggu sebelum beralih ke mode latar belakang (`0` langsung menjalankannya di latar belakang).
- `commands.config` (default `false`) mengaktifkan `/config` (membaca/menulis `openclaw.json`).
- `commands.mcp` (default `false`) mengaktifkan `/mcp` (membaca/menulis konfigurasi MCP yang dikelola OpenClaw di bawah `mcp.servers`).
- `commands.plugins` (default `false`) mengaktifkan `/plugins` (penemuan/status plugin serta kontrol instalasi + aktif/nonaktif).
- `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 permukaan perintah/tool khusus pemilik. Ini terpisah dari `commands.allowFrom`.
- `channels.<channel>.commands.enforceOwnerForCommands` per-channel (opsional, default `false`) membuat perintah khusus pemilik memerlukan **identitas pemilik** untuk dijalankan pada permukaan itu. Saat `true`, pengirim harus cocok dengan kandidat pemilik yang di-resolve (misalnya entri di `commands.ownerAllowFrom` atau metadata pemilik native provider) atau memiliki scope internal `operator.admin` pada channel pesan internal. Entri wildcard di channel `allowFrom`, atau daftar kandidat pemilik yang kosong/tidak ter-resolve, **tidak** cukup — perintah khusus pemilik gagal secara tertutup pada channel itu. Biarkan ini nonaktif jika Anda ingin perintah khusus pemilik hanya digate oleh `ownerAllowFrom` dan allowlist perintah standar.
- `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 adalah
satu-satunya sumber otorisasi untuk perintah dan directive (allowlist/pairing channel dan `commands.useAccessGroups`
diabaikan). Gunakan `"*"` untuk default global; key khusus provider mengoverride-nya.
- `commands.useAccessGroups` (default `true`) menegakkan allowlist/kebijakan untuk perintah saat `commands.allowFrom` tidak disetel.
- `channels.<channel>.commands.enforceOwnerForCommands` per channel (opsional, default `false`) membuat perintah khusus pemilik memerlukan **identitas pemilik** untuk dijalankan pada permukaan itu. Jika `true`, pengirim harus cocok dengan kandidat pemilik yang terselesaikan (misalnya entri dalam `commands.ownerAllowFrom` atau metadata pemilik native provider) atau memiliki cakupan internal `operator.admin` pada channel pesan internal. Entri wildcard dalam channel `allowFrom`, atau daftar kandidat pemilik yang kosong/tidak terselesaikan, **tidak** cukup — perintah khusus pemilik gagal tertutup pada channel tersebut. Biarkan ini nonaktif jika Anda ingin perintah khusus pemilik dibatasi hanya oleh `ownerAllowFrom` dan allowlist perintah standar.
- `commands.ownerDisplay` mengontrol bagaimana ID pemilik muncul dalam prompt sistem: `raw` atau `hash`.
- `commands.ownerDisplaySecret` secara opsional menetapkan rahasia HMAC yang digunakan saat `commands.ownerDisplay="hash"`.
- `commands.allowFrom` (opsional) menetapkan allowlist per provider untuk otorisasi perintah. Jika dikonfigurasi, ini adalah
satu-satunya sumber otorisasi untuk perintah dan direktif (`commands.useAccessGroups` serta allowlist/pairing channel
diabaikan). Gunakan `"*"` untuk default global; kunci khusus provider menimpa nilai tersebut.
- `commands.useAccessGroups` (default `true`) menerapkan allowlist/kebijakan untuk perintah saat `commands.allowFrom` tidak diatur.
## Daftar perintah
@ -90,55 +90,55 @@ Sumber kebenaran saat ini:
- built-in inti berasal dari `src/auto-reply/commands-registry.shared.ts`
- perintah dock yang dihasilkan berasal dari `src/auto-reply/commands-registry.data.ts`
- perintah plugin berasal dari panggilan plugin `registerCommand()`
- ketersediaan aktual pada gateway Anda tetap bergantung pada flag konfigurasi, permukaan channel, dan plugin yang terinstal/diaktifkan
- perintah plugin berasal dari pemanggilan `registerCommand()` plugin
- ketersediaan sebenarnya pada gateway Anda tetap bergantung pada flag konfigurasi, permukaan channel, dan plugin yang diinstal/diaktifkan
### Perintah built-in inti
Perintah built-in yang tersedia saat ini:
- `/new [model]` memulai sesi baru; `/reset` adalah alias reset.
- `/reset soft [message]` mempertahankan transkrip saat ini, menghapus ID sesi backend CLI yang digunakan ulang, dan menjalankan ulang pemuatan startup/system-prompt di tempat.
- `/reset soft [message]` mempertahankan transkrip saat ini, menghapus ID sesi backend CLI yang digunakan ulang, dan menjalankan ulang pemuatan startup/system prompt di tempat.
- `/compact [instructions]` melakukan Compaction pada konteks sesi. Lihat [/concepts/compaction](/id/concepts/compaction).
- `/stop` membatalkan run saat ini.
- `/session idle <duration|off>` dan `/session max-age <duration|off>` mengelola kedaluwarsa thread-binding.
- `/think <level>` menetapkan tingkat berpikir. Opsi berasal dari profil provider model aktif; level umum adalah `off`, `minimal`, `low`, `medium`, dan `high`, dengan level kustom seperti `xhigh`, `adaptive`, `max`, atau `on` biner hanya jika didukung. Alias: `/thinking`, `/t`.
- `/verbose on|off|full` mengaktifkan/menonaktifkan output verbose. Alias: `/v`.
- `/trace on|off` mengaktifkan/menonaktifkan output trace plugin untuk sesi saat ini.
- `/fast [status|on|off]` menampilkan atau menetapkan fast mode.
- `/reasoning [on|off|stream]` mengaktifkan/menonaktifkan visibilitas reasoning. Alias: `/reason`.
- `/elevated [on|off|ask|full]` mengaktifkan/menonaktifkan elevated mode. Alias: `/elev`.
- `/session idle <duration|off>` dan `/session max-age <duration|off>` mengelola kedaluwarsa pengikatan thread.
- `/think <level>` menetapkan tingkat pemikiran. Opsinya berasal dari profil provider model aktif; tingkat umum adalah `off`, `minimal`, `low`, `medium`, dan `high`, dengan tingkat kustom seperti `xhigh`, `adaptive`, `max`, atau biner `on` hanya jika didukung. Alias: `/thinking`, `/t`.
- `/verbose on|off|full` mengaktifkan atau menonaktifkan output verbose. Alias: `/v`.
- `/trace on|off` mengaktifkan atau menonaktifkan output trace plugin untuk sesi saat ini.
- `/fast [status|on|off]` menampilkan atau menetapkan mode cepat.
- `/reasoning [on|off|stream]` mengaktifkan atau menonaktifkan visibilitas reasoning. Alias: `/reason`.
- `/elevated [on|off|ask|full]` mengaktifkan atau menonaktifkan mode elevated. Alias: `/elev`.
- `/exec host=<auto|sandbox|gateway|node> security=<deny|allowlist|full> ask=<off|on-miss|always> node=<id>` menampilkan atau menetapkan default exec.
- `/model [name|#|status]` menampilkan atau menetapkan model.
- `/models [provider] [page] [limit=<n>|size=<n>|all]` mencantumkan provider atau model untuk suatu provider.
- `/queue <mode>` mengelola perilaku antrean (`steer`, `interrupt`, `followup`, `collect`, `steer-backlog`) plus opsi seperti `debounce:2s cap:25 drop:summarize`.
- `/queue <mode>` mengelola perilaku antrean (`steer`, `interrupt`, `followup`, `collect`, `steer-backlog`) beserta 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 agent saat ini sekarang juga.
- `/status` menampilkan status runtime, termasuk usage/kuota provider bila tersedia.
- `/tasks` mencantumkan task latar belakang aktif/terbaru untuk sesi saat ini.
- `/tools [compact|verbose]` menampilkan apa yang dapat digunakan agen saat ini sekarang juga.
- `/status` menampilkan status runtime, termasuk label `Runtime`/`Runner` dan penggunaan/kuota provider jika 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`.
- `/export-trajectory [path]` mengekspor [bundle trajectory](/id/tools/trajectory) JSONL untuk sesi saat ini. Alias: `/trajectory`.
- `/whoami` menampilkan ID pengirim Anda. Alias: `/id`.
- `/skill <name> [input]` menjalankan Skills berdasarkan nama.
- `/skill <name> [input]` menjalankan skill berdasarkan nama.
- `/allowlist [list|add|remove] ...` mengelola entri allowlist. Hanya teks.
- `/approve <id> <decision>` me-resolve prompt persetujuan exec.
- `/btw <question>` mengajukan pertanyaan sampingan tanpa mengubah konteks sesi di masa depan. Lihat [/tools/btw](/id/tools/btw).
- `/approve <id> <decision>` menyelesaikan prompt persetujuan exec.
- `/btw <question>` mengajukan pertanyaan sampingan tanpa mengubah konteks sesi di masa mendatang. 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 <target>` mengikat thread Discord atau topik/percakapan Telegram saat ini ke target sesi.
- `/unfocus` menghapus binding saat ini.
- `/agents` mencantumkan agent yang terikat ke thread untuk sesi saat ini.
- `/unfocus` menghapus pengikatan saat ini.
- `/agents` mencantumkan agen yang terikat ke thread untuk sesi saat ini.
- `/kill <id|#|all>` membatalkan satu atau semua sub-agent yang sedang berjalan.
- `/steer <id|#> <message>` mengirim steering ke sub-agent yang sedang berjalan. Alias: `/tell`.
- `/config show|get|set|unset` membaca atau menulis `openclaw.json`. Khusus pemilik. Memerlukan `commands.config: true`.
- `/mcp show|get|set|unset` membaca atau menulis konfigurasi server MCP yang dikelola OpenClaw di bawah `mcp.servers`. Khusus pemilik. Memerlukan `commands.mcp: true`.
- `/plugins list|inspect|show|get|install|enable|disable` memeriksa atau mengubah state plugin. `/plugin` adalah alias. Khusus pemilik untuk penulisan. Memerlukan `commands.plugins: true`.
- `/debug show|set|unset|reset` mengelola override konfigurasi khusus runtime. Khusus pemilik. Memerlukan `commands.debug: true`.
- `/usage off|tokens|full|cost` mengontrol footer usage per respons atau mencetak ringkasan biaya lokal.
- `/plugins list|inspect|show|get|install|enable|disable` memeriksa atau memutasi status plugin. `/plugin` adalah alias. Penulisan khusus pemilik. Memerlukan `commands.plugins: true`.
- `/debug show|set|unset|reset` mengelola override konfigurasi hanya runtime. Khusus 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.
- `/restart` me-restart OpenClaw jika diaktifkan. Default: aktif; atur `commands.restart: false` untuk menonaktifkannya.
- `/activation mention|always` menetapkan mode aktivasi grup.
- `/send on|off|inherit` menetapkan kebijakan pengiriman. Khusus pemilik.
- `/bash <command>` menjalankan perintah shell host. Hanya teks. Alias: `! <command>`. Memerlukan `commands.bash: true` plus allowlist `tools.elevated`.
@ -147,7 +147,7 @@ Perintah built-in yang tersedia saat ini:
### Perintah dock yang dihasilkan
Perintah dock dihasilkan dari plugin channel dengan dukungan native-command. Set bawaan saat ini:
Perintah dock dihasilkan dari plugin channel dengan dukungan perintah native. Set bawaan saat ini:
- `/dock-discord` (alias: `/dock_discord`)
- `/dock-mattermost` (alias: `/dock_mattermost`)
@ -158,12 +158,12 @@ Perintah dock dihasilkan dari plugin channel dengan dukungan native-command. Set
Plugin bawaan dapat menambahkan lebih banyak slash command. Perintah bawaan saat ini di repo ini:
- `/dreaming [on|off|status|help]` mengaktifkan/menonaktifkan Dreaming Memory. Lihat [Dreaming](/id/concepts/dreaming).
- `/pair [qr|status|pending|approve|cleanup|notify]` mengelola pairing perangkat/alur setup. Lihat [Pairing](/id/channels/pairing).
- `/phone status|arm <camera|screen|writes|all> [duration]|disarm` sementara mengaktifkan command Node ponsel berisiko tinggi.
- `/voice status|list [limit]|set <voiceId|name>` mengelola konfigurasi voice Talk. Di Discord, nama perintah native-nya adalah `/talkvoice`.
- `/dreaming [on|off|status|help]` mengaktifkan atau menonaktifkan Dreaming memori. 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 <camera|screen|writes|all> [duration]|disarm` mempersenjatai sementara perintah node ponsel berisiko tinggi.
- `/voice status|list [limit]|set <voiceId|name>` mengelola konfigurasi suara Talk. Di Discord, nama perintah native adalah `/talkvoice`.
- `/card ...` mengirim preset rich card LINE. Lihat [LINE](/id/channels/line).
- `/codex status|models|threads|resume|compact|review|account|mcp|skills` memeriksa dan mengontrol harness app-server Codex bawaan. Lihat [Harness Codex](/id/plugins/codex-harness).
- `/codex status|models|threads|resume|compact|review|account|mcp|skills` memeriksa dan mengontrol harness app-server Codex bawaan. Lihat [Codex Harness](/id/plugins/codex-harness).
- Perintah khusus QQBot:
- `/bot-ping`
- `/bot-version`
@ -171,77 +171,77 @@ Plugin bawaan dapat menambahkan lebih banyak slash command. Perintah bawaan saat
- `/bot-upgrade`
- `/bot-logs`
### Perintah Skills dinamis
### Perintah skill dinamis
Skills yang dapat dipanggil pengguna juga diekspos sebagai slash command:
Skill yang dapat dipanggil pengguna juga diekspos sebagai slash command:
- `/skill <name> [input]` selalu berfungsi sebagai entrypoint generik.
- Skills juga dapat muncul sebagai perintah langsung seperti `/prose` saat skill/plugin mendaftarkannya.
- Registrasi perintah Skills native dikendalikan oleh `commands.nativeSkills` dan `channels.<provider>.commands.nativeSkills`.
- skill juga dapat muncul sebagai perintah langsung seperti `/prose` ketika skill/plugin mendaftarkannya.
- pendaftaran perintah skill native dikontrol oleh `commands.nativeSkills` dan `channels.<provider>.commands.nativeSkills`.
Catatan:
- Perintah menerima `:` opsional antara perintah dan argumen (misalnya `/think: high`, `/send: on`, `/help:`).
- `/new <model>` menerima alias model, `provider/model`, atau nama provider (fuzzy match); jika tidak ada yang cocok, teks diperlakukan sebagai body pesan.
- Untuk rincian usage provider lengkap, gunakan `openclaw status --usage`.
- `/allowlist add|remove` memerlukan `commands.config=true` dan menghormati `configWrites` channel.
- Di channel multi-akun, `/allowlist --account <id>` yang menargetkan konfigurasi dan `/config set channels.<provider>.accounts.<id>...` juga menghormati `configWrites` akun target.
- `/usage` mengontrol footer usage per respons; `/usage cost` mencetak ringkasan biaya lokal dari log sesi OpenClaw.
- `/restart` aktif secara default; setel `commands.restart: false` untuk menonaktifkannya.
- `/plugins install <spec>` menerima spesifikasi plugin yang sama seperti `openclaw plugins install`: path/arsip lokal, package npm, atau `clawhub:<pkg>`.
- `/new <model>` menerima alias model, `provider/model`, atau nama provider (fuzzy match); jika tidak ada yang cocok, teks diperlakukan sebagai isi pesan.
- Untuk rincian penggunaan provider lengkap, gunakan `openclaw status --usage`.
- `/allowlist add|remove` memerlukan `commands.config=true` dan mengikuti `configWrites` channel.
- Dalam channel multi-akun, `/allowlist --account <id>` yang menargetkan konfigurasi dan `/config set channels.<provider>.accounts.<id>...` juga mengikuti `configWrites` akun target.
- `/usage` mengontrol footer penggunaan per respons; `/usage cost` mencetak ringkasan biaya lokal dari log sesi OpenClaw.
- `/restart` aktif secara default; atur `commands.restart: false` untuk menonaktifkannya.
- `/plugins install <spec>` menerima spesifikasi plugin yang sama seperti `openclaw plugins install`: path/arsip lokal, paket npm, atau `clawhub:<pkg>`.
- `/plugins enable|disable` memperbarui konfigurasi plugin dan mungkin meminta restart.
- Perintah native khusus Discord: `/vc join|leave|status` mengontrol voice channel (memerlukan `channels.discord.voice` dan perintah native; tidak tersedia sebagai teks).
- Perintah thread-binding Discord (`/focus`, `/unfocus`, `/agents`, `/session idle`, `/session max-age`) memerlukan thread binding efektif yang diaktifkan (`session.threadBindings.enabled` dan/atau `channels.discord.threadBindings.enabled`).
- 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 **off** dalam penggunaan normal.
- `/trace` lebih sempit daripada `/verbose`: hanya menampilkan baris trace/debug milik plugin dan tetap menonaktifkan chatter tool verbose normal.
- `/fast on|off` mem-persist override sesi. Gunakan opsi `inherit` di UI Sessions untuk menghapusnya dan fallback ke default konfigurasi.
- `/fast` bersifat khusus provider: OpenAI/OpenAI Codex memetakannya ke `service_tier=priority` pada endpoint Responses native, sedangkan permintaan Anthropic publik langsung, termasuk traffic yang diautentikasi 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` adalah `on` atau `full`.
- `/reasoning`, `/verbose`, dan `/trace` berisiko dalam pengaturan grup: perintah ini dapat mengungkap reasoning internal, output tool, atau diagnostik plugin yang tidak ingin Anda ekspos. Sebaiknya biarkan nonaktif, terutama di obrolan grup.
- `/model` mem-persist model sesi baru segera.
- Jika agent sedang idle, run berikutnya langsung menggunakannya.
- Jika sebuah run sudah aktif, OpenClaw menandai live switch sebagai tertunda dan hanya me-restart ke model baru pada titik retry yang bersih.
- Jika aktivitas tool atau output balasan sudah dimulai, peralihan tertunda dapat tetap mengantre sampai peluang 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.
- **Shortcut inline (hanya untuk pengirim yang di-allowlist):** perintah tertentu 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 melalui alur normal.
- `/verbose` dimaksudkan untuk debugging dan visibilitas tambahan; biarkan **nonaktif** dalam penggunaan normal.
- `/trace` lebih sempit daripada `/verbose`: ini hanya menampilkan baris trace/debug milik plugin dan menjaga chatter tool verbose normal tetap nonaktif.
- `/fast on|off` mempertahankan override sesi. Gunakan opsi `inherit` di UI Sessions untuk menghapusnya dan kembali ke default konfigurasi.
- `/fast` bersifat khusus provider: OpenAI/OpenAI Codex memetakannya ke `service_tier=priority` pada endpoint native Responses, 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 bila relevan, tetapi teks kegagalan terperinci hanya disertakan saat `/verbose` `on` atau `full`.
- `/reasoning`, `/verbose`, dan `/trace` berisiko dalam pengaturan grup: ini dapat mengungkap reasoning internal, output tool, atau diagnostik plugin yang tidak Anda maksudkan untuk ditampilkan. Sebaiknya biarkan nonaktif, terutama di chat grup.
- `/model` langsung mempertahankan model sesi yang baru.
- Jika agen 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, perpindahan tertunda dapat tetap mengantre hingga kesempatan retry berikutnya atau giliran pengguna berikutnya.
- **Jalur cepat:** pesan khusus perintah dari pengirim yang masuk allowlist ditangani segera (melewati antrean + model).
- **Pembatasan mention grup:** pesan khusus perintah dari pengirim yang masuk allowlist melewati persyaratan mention.
- **Shortcut inline (khusus pengirim yang masuk allowlist):** perintah tertentu juga berfungsi saat disisipkan 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 yang tidak diotorisasi diabaikan diam-diam, dan token inline `/...` diperlakukan sebagai teks biasa.
- **Perintah Skills:** Skills `user-invocable` diekspos sebagai slash command. Nama disanitasi menjadi `a-z0-9_` (maks 32 karakter); tabrakan diberi sufiks numerik (misalnya `_2`).
- `/skill <name> [input]` menjalankan Skills berdasarkan nama (berguna saat batas perintah native mencegah perintah per-skill).
- Secara default, perintah Skills diteruskan ke model sebagai permintaan normal.
- Skills dapat secara opsional mendeklarasikan `command-dispatch: tool` untuk merutekan perintah langsung ke tool (deterministik, tanpa model).
- Pesan khusus perintah yang tidak sah diabaikan tanpa suara, dan token inline `/...` diperlakukan sebagai teks biasa.
- **Perintah skill:** skill `user-invocable` juga diekspos sebagai slash command. Nama disanitasi menjadi `a-z0-9_` (maksimal 32 karakter); benturan diberi sufiks numerik (misalnya `_2`).
- `/skill <name> [input]` menjalankan skill berdasarkan nama (berguna saat batas perintah native mencegah perintah per-skill).
- Secara default, perintah skill diteruskan ke model sebagai permintaan normal.
- Skill secara opsional dapat mendeklarasikan `command-dispatch: tool` untuk mengarahkan perintah langsung ke tool (deterministik, tanpa model).
- Contoh: `/prose` (plugin OpenProse) — lihat [OpenProse](/id/prose).
- **Argumen perintah native:** Discord menggunakan autocomplete untuk opsi dinamis (dan menu tombol saat Anda menghilangkan argumen wajib). Telegram dan Slack menampilkan menu tombol saat suatu perintah mendukung pilihan dan Anda menghilangkan argumennya.
- **Argumen perintah native:** Discord menggunakan autocomplete untuk opsi dinamis (dan menu tombol ketika Anda menghilangkan argumen yang diwajibkan). Telegram dan Slack menampilkan menu tombol ketika suatu perintah mendukung pilihan dan Anda menghilangkan argumennya.
## `/tools`
`/tools` menjawab pertanyaan runtime, bukan pertanyaan konfigurasi: **apa yang dapat digunakan agent ini sekarang juga dalam
`/tools` menjawab pertanyaan runtime, bukan pertanyaan konfigurasi: **apa yang dapat digunakan agen ini sekarang juga dalam
percakapan ini**.
- `/tools` default bersifat ringkas dan dioptimalkan untuk pemindaian cepat.
- Default `/tools` bersifat 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 memiliki cakupan sesi, sehingga mengubah agent, channel, thread, otorisasi pengirim, atau model dapat
- Permukaan perintah native yang mendukung argumen mengekspos pengalih mode yang sama sebagai `compact|verbose`.
- Hasilnya bersifat terlingkup sesi, sehingga mengganti agen, channel, thread, otorisasi pengirim, atau model dapat
mengubah output.
- `/tools` mencakup tool yang benar-benar dapat dijangkau pada runtime, termasuk tool inti, connected
tool plugin, dan tool milik channel.
- `/tools` mencakup tool yang benar-benar dapat dijangkau saat runtime, termasuk tool inti, tool plugin yang terhubung, dan tool milik channel.
Untuk pengeditan profil dan override, gunakan panel Tools di Control UI atau permukaan config/catalog
alih-alih memperlakukan `/tools` sebagai katalog statis.
Untuk mengedit profil dan override, gunakan panel Tools di UI Control atau permukaan config/katalog alih-alih
memperlakukan `/tools` sebagai katalog statis.
## Permukaan usage (apa yang muncul di mana)
## Permukaan penggunaan (apa yang tampil di mana)
- **Usage/kuota provider** (contoh: “Claude tersisa 80%”) muncul di `/status` untuk provider model saat ini ketika pelacakan usage diaktifkan. OpenClaw menormalisasi jendela provider menjadi `% tersisa`; untuk MiniMax, field persentase hanya-tersisa dibalik sebelum ditampilkan, dan respons `model_remains` lebih mengutamakan entri model chat plus label paket bertag model.
- **Baris token/cache** di `/status` dapat fallback ke entri usage transkrip terbaru saat snapshot sesi live jarang. Nilai live nonzero yang ada tetap menang, dan fallback transkrip juga dapat memulihkan label model runtime aktif plus total berorientasi prompt yang lebih besar saat total tersimpan tidak ada atau lebih kecil.
- **Token/biaya per respons** dikendalikan oleh `/usage off|tokens|full` (ditambahkan ke balasan normal).
- `/model status` berfokus pada **model/auth/endpoint**, bukan usage.
- **Penggunaan/kuota provider** (contoh: “Claude tersisa 80%”) muncul di `/status` untuk provider model saat ini ketika pelacakan penggunaan diaktifkan. OpenClaw menormalkan jendela provider menjadi `% tersisa`; untuk MiniMax, field persentase hanya-sisa 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 ketika snapshot sesi live jarang. Nilai live bukan nol yang ada tetap diutamakan, dan fallback transkrip juga dapat memulihkan label model runtime aktif plus total berorientasi prompt yang lebih besar saat total yang disimpan hilang atau lebih kecil.
- **Runtime vs runner:** `/status` melaporkan `Runtime` untuk jalur eksekusi efektif dan status sandbox, serta `Runner` untuk siapa yang benar-benar menjalankan sesi: Pi tertanam, provider berbasis CLI, atau harness/backend ACP.
- **Token/biaya per respons** dikontrol oleh `/usage off|tokens|full` (ditambahkan ke balasan normal).
- `/model status` berkaitan dengan **model/auth/endpoint**, bukan penggunaan.
## Pemilihan model (`/model`)
`/model` diimplementasikan sebagai directive.
`/model` diimplementasikan sebagai direktif.
Contoh:
@ -258,12 +258,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 mengutamakan provider saat ini jika memungkinkan).
- `/model status` menampilkan tampilan detail, termasuk endpoint provider yang dikonfigurasi (`baseUrl`) dan mode API (`api`) saat tersedia.
- `/model <#>` memilih dari pemilih tersebut (dan mengutamakan provider saat ini bila memungkinkan).
- `/model status` menampilkan tampilan terperinci, termasuk endpoint provider yang dikonfigurasi (`baseUrl`) dan mode API (`api`) bila tersedia.
## Override debug
`/debug` memungkinkan Anda menetapkan override konfigurasi **khusus runtime** (memori, bukan disk). Khusus pemilik. Nonaktif secara default; aktifkan dengan `commands.debug: true`.
`/debug` memungkinkan Anda menetapkan override konfigurasi **hanya runtime** (memori, bukan disk). Khusus pemilik. Nonaktif secara default; aktifkan dengan `commands.debug: true`.
Contoh:
@ -282,7 +282,7 @@ Catatan:
## Output trace plugin
`/trace` memungkinkan Anda mengaktifkan/menonaktifkan **baris trace/debug plugin dengan cakupan sesi** tanpa menyalakan mode verbose penuh.
`/trace` memungkinkan Anda mengaktifkan atau menonaktifkan **baris trace/debug plugin yang terlingkup sesi** tanpa menyalakan mode verbose penuh.
Contoh:
@ -294,11 +294,11 @@ Contoh:
Catatan:
- `/trace` tanpa argumen menampilkan state trace sesi saat ini.
- `/trace` tanpa argumen menampilkan status trace sesi saat ini.
- `/trace on` mengaktifkan baris trace plugin untuk sesi saat ini.
- `/trace off` menonaktifkannya kembali.
- Baris trace plugin dapat muncul di `/status` dan sebagai pesan diagnostik lanjutan setelah balasan assistant normal.
- `/trace` tidak menggantikan `/debug`; `/debug` tetap mengelola override konfigurasi khusus runtime.
- Baris trace plugin dapat muncul di `/status` dan sebagai pesan diagnostik lanjutan setelah balasan asisten normal.
- `/trace` tidak menggantikan `/debug`; `/debug` tetap mengelola override konfigurasi hanya runtime.
- `/trace` tidak menggantikan `/verbose`; output tool/status verbose normal tetap milik `/verbose`.
## Pembaruan konfigurasi
@ -317,8 +317,8 @@ Contoh:
Catatan:
- Konfigurasi divalidasi sebelum penulisan; perubahan yang tidak valid ditolak.
- Pembaruan `/config` tetap ada setelah restart.
- Konfigurasi divalidasi sebelum ditulis; perubahan yang tidak valid ditolak.
- Pembaruan `/config` tetap bertahan setelah restart.
## Pembaruan MCP
@ -335,12 +335,12 @@ Contoh:
Catatan:
- `/mcp` menyimpan konfigurasi di konfigurasi OpenClaw, bukan pengaturan proyek milik Pi.
- `/mcp` menyimpan konfigurasi di konfigurasi OpenClaw, bukan pengaturan project milik Pi.
- Adapter runtime menentukan transport mana yang benar-benar dapat dieksekusi.
## Pembaruan plugin
`/plugins` memungkinkan operator memeriksa plugin yang ditemukan dan mengaktifkan/menonaktifkan plugin di konfigurasi. Alur hanya-baca dapat menggunakan `/plugin` sebagai alias. Nonaktif secara default; aktifkan dengan `commands.plugins: true`.
`/plugins` memungkinkan operator memeriksa plugin yang ditemukan dan mengaktifkan/menonaktifkan dalam konfigurasi. Alur hanya-baca dapat menggunakan `/plugin` sebagai alias. Nonaktif secara default; aktifkan dengan `commands.plugins: true`.
Contoh:
@ -354,13 +354,13 @@ Contoh:
Catatan:
- `/plugins list` dan `/plugins show` menggunakan discovery plugin nyata terhadap workspace saat ini plus konfigurasi di disk.
- `/plugins enable|disable` hanya memperbarui konfigurasi plugin; tidak menginstal atau menghapus plugin.
- Setelah perubahan enable/disable, restart gateway untuk menerapkannya.
- `/plugins list` dan `/plugins show` menggunakan penemuan plugin nyata terhadap workspace saat ini plus konfigurasi di disk.
- `/plugins enable|disable` hanya memperbarui konfigurasi plugin; ini tidak menginstal atau menghapus instalasi plugin.
- Setelah perubahan aktif/nonaktif, restart gateway untuk menerapkannya.
## Catatan permukaan
- **Perintah teks** berjalan dalam sesi chat normal (DM berbagi `main`, grup memiliki sesi mereka sendiri).
- **Perintah teks** berjalan dalam sesi chat normal (DM berbagi `main`, grup memiliki sesinya sendiri).
- **Perintah native** menggunakan sesi terisolasi:
- Discord: `agent:<agentId>:discord:slash:<userId>`
- Slack: `agent:<agentId>:slack:slash:<userId>` (prefiks dapat dikonfigurasi melalui `channels.slack.slashCommand.sessionPrefix`)
@ -373,15 +373,15 @@ Catatan:
`/btw` adalah **pertanyaan sampingan** cepat tentang sesi saat ini.
Berbeda dari chat normal:
Tidak seperti chat normal:
- menggunakan sesi saat ini sebagai konteks latar belakang,
- berjalan sebagai panggilan sekali jalan **tanpa tool** yang terpisah,
- tidak mengubah konteks sesi di masa depan,
- tidak ditulis ke riwayat transkrip,
- dikirim sebagai hasil sampingan live alih-alih pesan assistant normal.
- ini menggunakan sesi saat ini sebagai konteks latar belakang,
- ini berjalan sebagai panggilan sekali jalan **tanpa tool** yang terpisah,
- ini tidak mengubah konteks sesi di masa mendatang,
- ini tidak ditulis ke riwayat transkrip,
- ini dikirim sebagai hasil sampingan live alih-alih pesan asisten normal.
Itu membuat `/btw` berguna ketika Anda menginginkan klarifikasi sementara sementara
Ini membuat `/btw` berguna saat Anda menginginkan klarifikasi sementara sementara
tugas utama tetap berjalan.
Contoh:
@ -391,4 +391,4 @@ Contoh:
```
Lihat [BTW Side Questions](/id/tools/btw) untuk perilaku lengkap dan detail UX
client.
klien.

View File

@ -1,44 +1,44 @@
---
read_when:
- Menyesuaikan parsing atau default direktif thinking, fast-mode, atau verbose
summary: Sintaks direktif untuk /think, /fast, /verbose, /trace, dan visibilitas reasoning
title: Level Thinking
- Menyesuaikan parsing atau default direktif tingkat pemikiran, mode cepat, atau verbose
summary: Sintaks direktif untuk /think, /fast, /verbose, /trace, dan visibilitas penalaran
title: Tingkat Pemikiran
x-i18n:
generated_at: "2026-04-23T09:29:32Z"
generated_at: "2026-04-23T13:58:10Z"
model: gpt-5.4
provider: openai
source_hash: 66033bb9272c9b9ea8fc85dc91e33e95ce4c469c56a8cd10c19632a5aa8a2338
source_hash: 4efe899f7b47244745a105583b3239effa7975fadd06bd7bcad6327afcc91207
source_path: tools/thinking.md
workflow: 15
---
# Level Thinking (/think directives)
# Tingkat Pemikiran (direktif `/think`)
## Fungsinya
## Apa yang dilakukan
- Direktif inline di body masuk mana pun: `/t <level>`, `/think:<level>`, atau `/thinking <level>`.
- Level (alias): `off | minimal | low | medium | high | xhigh | adaptive | max`
- minimal → “think
- low → “think hard
- medium → “think harder
- Direktif inline di isi pesan masuk mana pun: `/t <level>`, `/think:<level>`, atau `/thinking <level>`.
- Tingkat (alias): `off | minimal | low | medium | high | xhigh | adaptive | max`
- minimal → “pikir
- low → “pikir keras
- medium → “pikir lebih keras
- high → “ultrathink” (anggaran maksimum)
- xhigh → “ultrathink+” (GPT-5.2 + model Codex dan effort Anthropic Claude Opus 4.7)
- adaptive → thinking adaptif yang dikelola provider (didukung untuk Claude 4.6 pada Anthropic/Bedrock dan Anthropic Claude Opus 4.7)
- max → reasoning maksimum provider (saat ini Anthropic Claude Opus 4.7)
- xhigh → “ultrathink+” (upaya GPT-5.2 + model Codex dan Anthropic Claude Opus 4.7)
- adaptive → pemikiran adaptif yang dikelola provider (didukung untuk Claude 4.6 di Anthropic/Bedrock dan Anthropic Claude Opus 4.7)
- max → penalaran maksimum provider (saat ini Anthropic Claude Opus 4.7)
- `x-high`, `x_high`, `extra-high`, `extra high`, dan `extra_high` dipetakan ke `xhigh`.
- `highest` dipetakan ke `high`.
- Catatan provider:
- Menu dan picker thinking digerakkan oleh profil provider. Plugin provider mendeklarasikan kumpulan level yang tepat untuk model yang dipilih, termasuk label seperti `on` biner.
- `adaptive`, `xhigh`, dan `max` hanya diiklankan untuk profil provider/model yang mendukungnya. Direktif bertipe untuk level yang tidak didukung ditolak dengan opsi valid model tersebut.
- Level tersimpan yang sudah ada tetapi tidak didukung dipetakan ulang berdasarkan peringkat profil provider. `adaptive` fallback ke `medium` pada model non-adaptif, sedangkan `xhigh` dan `max` fallback ke level non-off terbesar yang didukung untuk model yang dipilih.
- Model Anthropic Claude 4.6 default ke `adaptive` ketika tidak ada level thinking eksplisit yang disetel.
- Anthropic Claude Opus 4.7 tidak default ke thinking adaptif. Default effort API-nya tetap dimiliki provider kecuali Anda secara eksplisit menyetel level thinking.
- Anthropic Claude Opus 4.7 memetakan `/think xhigh` ke thinking adaptif plus `output_config.effort: "xhigh"`, karena `/think` adalah direktif thinking dan `xhigh` adalah pengaturan effort Opus 4.7.
- Anthropic Claude Opus 4.7 juga mengekspos `/think max`; ini dipetakan ke jalur effort maksimum milik provider yang sama.
- Model GPT OpenAI memetakan `/think` melalui dukungan effort Responses API spesifik model. `/think off` mengirim `reasoning.effort: "none"` hanya ketika model target mendukungnya; jika tidak, OpenClaw menghilangkan payload reasoning yang dinonaktifkan alih-alih mengirim nilai yang tidak didukung.
- MiniMax (`minimax/*`) pada jalur streaming kompatibel Anthropic default ke `thinking: { type: "disabled" }` kecuali Anda secara eksplisit menyetel thinking di model params atau request params. Ini menghindari delta `reasoning_content` yang bocor dari format stream Anthropic non-native milik MiniMax.
- Z.AI (`zai/*`) hanya mendukung thinking biner (`on`/`off`). Level apa pun selain `off` diperlakukan sebagai `on` (dipetakan ke `low`).
- Moonshot (`moonshot/*`) memetakan `/think off` ke `thinking: { type: "disabled" }` dan level apa pun selain `off` ke `thinking: { type: "enabled" }`. Saat thinking diaktifkan, Moonshot hanya menerima `tool_choice` `auto|none`; OpenClaw menormalkan nilai yang tidak kompatibel ke `auto`.
- Menu dan pemilih pemikiran digerakkan oleh profil provider. Plugin provider mendeklarasikan kumpulan tingkat yang tepat untuk model yang dipilih, termasuk label seperti `on` biner.
- `adaptive`, `xhigh`, dan `max` hanya diiklankan untuk profil provider/model yang mendukungnya. Direktif bertipe untuk tingkat yang tidak didukung ditolak dengan opsi valid untuk model tersebut.
- Tingkat tersimpan yang tidak didukung akan dipetakan ulang berdasarkan peringkat profil provider. `adaptive` akan fallback ke `medium` pada model non-adaptif, sementara `xhigh` dan `max` akan fallback ke tingkat non-`off` terbesar yang didukung untuk model yang dipilih.
- Model Anthropic Claude 4.6 default ke `adaptive` saat tidak ada tingkat pemikiran eksplisit yang disetel.
- Anthropic Claude Opus 4.7 tidak default ke pemikiran adaptif. Default upaya API-nya tetap dimiliki provider kecuali Anda secara eksplisit menetapkan tingkat pemikiran.
- Anthropic Claude Opus 4.7 memetakan `/think xhigh` ke pemikiran adaptif plus `output_config.effort: "xhigh"`, karena `/think` adalah direktif pemikiran dan `xhigh` adalah pengaturan upaya Opus 4.7.
- Anthropic Claude Opus 4.7 juga mengekspos `/think max`; ini dipetakan ke jalur upaya maksimum yang sama milik provider.
- Model OpenAI GPT memetakan `/think` melalui dukungan upaya Responses API spesifik model. `/think off` mengirim `reasoning.effort: "none"` hanya ketika model target mendukungnya; jika tidak, OpenClaw menghilangkan payload reasoning yang dinonaktifkan alih-alih mengirim nilai yang tidak didukung.
- MiniMax (`minimax/*`) pada jalur streaming yang kompatibel dengan Anthropic default ke `thinking: { type: "disabled" }` kecuali Anda secara eksplisit menetapkan thinking di parameter model atau parameter request. Ini mencegah delta `reasoning_content` bocor dari format stream Anthropic non-native MiniMax.
- Z.AI (`zai/*`) hanya mendukung thinking biner (`on`/`off`). Tingkat apa pun selain `off` diperlakukan sebagai `on` (dipetakan ke `low`).
- Moonshot (`moonshot/*`) memetakan `/think off` ke `thinking: { type: "disabled" }` dan tingkat apa pun selain `off` ke `thinking: { type: "enabled" }`. Saat thinking diaktifkan, Moonshot hanya menerima `tool_choice` `auto|none`; OpenClaw menormalkan nilai yang tidak kompatibel ke `auto`.
## Urutan resolusi
@ -46,87 +46,87 @@ x-i18n:
2. Override sesi (disetel dengan mengirim pesan yang hanya berisi direktif).
3. Default per-agent (`agents.list[].thinkingDefault` di config).
4. Default global (`agents.defaults.thinkingDefault` di config).
5. Fallback: default yang dideklarasikan provider saat tersedia, `low` untuk model katalog lain yang ditandai mampu reasoning, `off` untuk selain itu.
5. Fallback: default yang dideklarasikan provider bila tersedia; jika tidak, model yang mampu bernalar akan diresolusikan ke `medium` atau tingkat non-`off` terdekat yang didukung untuk model tersebut, dan model non-penalaran tetap `off`.
## Menyetel default sesi
- Kirim pesan yang **hanya** berupa direktif (whitespace diperbolehkan), misalnya `/think:medium` atau `/t high`.
- Ini akan bertahan untuk sesi saat ini (default-nya per-pengirim); dihapus oleh `/think:off` atau reset idle sesi.
- Balasan konfirmasi dikirim (`Thinking level set to high.` / `Thinking disabled.`). Jika level tidak valid (misalnya `/thinking big`), perintah ditolak dengan petunjuk dan state sesi dibiarkan tidak berubah.
- Kirim `/think` (atau `/think:`) tanpa argumen untuk melihat level thinking saat ini.
- Kirim pesan yang **hanya** berisi direktif (spasi diperbolehkan), misalnya `/think:medium` atau `/t high`.
- Ini akan tetap berlaku untuk sesi saat ini (default-nya per-pengirim); dibersihkan oleh `/think:off` atau reset idle sesi.
- Balasan konfirmasi dikirim (`Thinking level set to high.` / `Thinking disabled.`). Jika tingkat tidak valid (misalnya `/thinking big`), perintah ditolak dengan petunjuk dan status sesi dibiarkan tidak berubah.
- Kirim `/think` (atau `/think:`) tanpa argumen untuk melihat tingkat pemikiran saat ini.
## Penerapan oleh agent
## Penerapan per agent
- **Embedded Pi**: level hasil resolve diteruskan ke runtime agent Pi in-process.
- **Embedded Pi**: tingkat yang diresolusikan diteruskan ke runtime agent Pi in-process.
## Mode cepat (/fast)
- Level: `on|off`.
- Pesan yang hanya berupa direktif mengaktifkan/mematikan override mode cepat sesi dan membalas `Fast mode enabled.` / `Fast mode disabled.`.
- Kirim `/fast` (atau `/fast status`) tanpa mode untuk melihat state mode cepat efektif saat ini.
- OpenClaw me-resolve mode cepat dalam urutan ini:
1. Inline/direktif-saja `/fast on|off`
- Tingkat: `on|off`.
- Pesan yang hanya berisi direktif mengaktifkan override mode cepat sesi dan membalas `Fast mode enabled.` / `Fast mode disabled.`.
- Kirim `/fast` (atau `/fast status`) tanpa mode untuk melihat status mode cepat efektif saat ini.
- OpenClaw menyelesaikan mode cepat dalam urutan ini:
1. Inline/pesan khusus direktif `/fast on|off`
2. Override sesi
3. Default per-agent (`agents.list[].fastModeDefault`)
4. Config per-model: `agents.defaults.models["<provider>/<model>"].params.fastMode`
5. Fallback: `off`
- Untuk `openai/*`, mode cepat dipetakan ke pemrosesan prioritas OpenAI dengan mengirim `service_tier=priority` pada permintaan Responses yang didukung.
- Untuk `openai-codex/*`, mode cepat mengirim flag `service_tier=priority` yang sama pada Codex Responses. OpenClaw mempertahankan satu toggle `/fast` bersama di kedua jalur auth.
- Untuk permintaan `anthropic/*` publik langsung, termasuk lalu lintas yang diautentikasi OAuth yang dikirim ke `api.anthropic.com`, mode cepat dipetakan ke service tier Anthropic: `/fast on` menyetel `service_tier=auto`, `/fast off` menyetel `service_tier=standard_only`.
- Untuk `minimax/*` pada jalur kompatibel Anthropic, `/fast on` (atau `params.fastMode: true`) menulis ulang `MiniMax-M2.7` menjadi `MiniMax-M2.7-highspeed`.
- `serviceTier` / `service_tier` model params Anthropic eksplisit menimpa default mode cepat ketika keduanya disetel. OpenClaw tetap melewati penyuntikan service-tier Anthropic untuk base URL proxy non-Anthropic.
- Untuk `openai/*`, mode cepat dipetakan ke pemrosesan prioritas OpenAI dengan mengirim `service_tier=priority` pada request Responses yang didukung.
- Untuk `openai-codex/*`, mode cepat mengirim flag `service_tier=priority` yang sama pada Codex Responses. OpenClaw mempertahankan satu toggle `/fast` bersama untuk kedua jalur autentikasi.
- Untuk request publik langsung `anthropic/*`, termasuk traffic terautentikasi OAuth yang dikirim ke `api.anthropic.com`, mode cepat dipetakan ke tingkat layanan Anthropic: `/fast on` menyetel `service_tier=auto`, `/fast off` menyetel `service_tier=standard_only`.
- Untuk `minimax/*` pada jalur yang kompatibel dengan Anthropic, `/fast on` (atau `params.fastMode: true`) menulis ulang `MiniMax-M2.7` menjadi `MiniMax-M2.7-highspeed`.
- Parameter model Anthropic `serviceTier` / `service_tier` yang eksplisit menimpa default mode cepat saat keduanya disetel. OpenClaw tetap melewati injeksi tingkat layanan Anthropic untuk base URL proxy non-Anthropic.
- `/status` menampilkan `Fast` hanya saat mode cepat diaktifkan.
## Direktif verbose (/verbose atau /v)
## Direktif verbose (`/verbose` atau `/v`)
- Level: `on` (minimal) | `full` | `off` (default).
- Pesan yang hanya berupa direktif mengaktifkan/mematikan verbose sesi dan membalas `Verbose logging enabled.` / `Verbose logging disabled.`; level yang tidak valid mengembalikan petunjuk tanpa mengubah state.
- Tingkat: `on` (minimal) | `full` | `off` (default).
- Pesan yang hanya berisi direktif mengaktifkan verbose sesi dan membalas `Verbose logging enabled.` / `Verbose logging disabled.`; tingkat yang tidak valid mengembalikan petunjuk tanpa mengubah status.
- `/verbose off` menyimpan override sesi eksplisit; hapus melalui UI Sessions dengan memilih `inherit`.
- Direktif inline hanya memengaruhi pesan itu; default sesi/global berlaku untuk selain itu.
- Kirim `/verbose` (atau `/verbose:`) tanpa argumen untuk melihat level verbose saat ini.
- Saat verbose aktif, agent yang mengeluarkan hasil tool terstruktur (Pi, agent JSON lain) mengirim balik setiap pemanggilan tool sebagai pesan metadata-saja tersendiri, diawali dengan `<emoji> <tool-name>: <arg>` saat tersedia (jalur/perintah). Ringkasan tool ini dikirim segera saat setiap tool dimulai (bubble terpisah), bukan sebagai delta streaming.
- Ringkasan kegagalan tool tetap terlihat dalam mode normal, tetapi sufiks detail error mentah disembunyikan kecuali verbose adalah `on` atau `full`.
- Saat verbose adalah `full`, output tool juga diteruskan setelah selesai (bubble terpisah, dipotong ke panjang aman). Jika Anda mengganti `/verbose on|full|off` saat eksekusi masih berlangsung, bubble tool berikutnya mengikuti pengaturan baru.
- Direktif inline hanya memengaruhi pesan itu; default sesi/global berlaku dalam kondisi lain.
- Kirim `/verbose` (atau `/verbose:`) tanpa argumen untuk melihat tingkat verbose saat ini.
- Saat verbose aktif, agent yang mengeluarkan hasil tool terstruktur (Pi, agent JSON lain) mengirim kembali setiap pemanggilan tool sebagai pesan khusus metadata tersendiri, diawali dengan `<emoji> <tool-name>: <arg>` bila tersedia (path/command). Ringkasan tool ini dikirim segera saat tiap tool dimulai (bubble terpisah), bukan sebagai delta streaming.
- Ringkasan kegagalan tool tetap terlihat dalam mode normal, tetapi sufiks detail error mentah disembunyikan kecuali verbose `on` atau `full`.
- Saat verbose `full`, output tool juga diteruskan setelah selesai (bubble terpisah, dipotong ke panjang aman). Jika Anda mengubah `/verbose on|full|off` saat run sedang berlangsung, bubble tool berikutnya akan mengikuti pengaturan baru.
## Direktif jejak Plugin (/trace)
## Direktif trace plugin (`/trace`)
- Level: `on` | `off` (default).
- Pesan yang hanya berupa direktif mengaktifkan/mematikan output jejak Plugin sesi dan membalas `Plugin trace enabled.` / `Plugin trace disabled.`.
- Direktif inline hanya memengaruhi pesan itu; default sesi/global berlaku untuk selain itu.
- Kirim `/trace` (atau `/trace:`) tanpa argumen untuk melihat level jejak saat ini.
- `/trace` lebih sempit daripada `/verbose`: ini hanya mengekspos baris jejak/debug milik Plugin seperti ringkasan debug Active Memory.
- Baris jejak dapat muncul di `/status` dan sebagai pesan diagnostik tindak lanjut setelah balasan assistant normal.
- Tingkat: `on` | `off` (default).
- Pesan yang hanya berisi direktif mengaktifkan output trace plugin sesi dan membalas `Plugin trace enabled.` / `Plugin trace disabled.`.
- Direktif inline hanya memengaruhi pesan itu; default sesi/global berlaku dalam kondisi lain.
- Kirim `/trace` (atau `/trace:`) tanpa argumen untuk melihat tingkat trace saat ini.
- `/trace` lebih sempit daripada `/verbose`: ini hanya mengekspos baris trace/debug milik plugin seperti ringkasan debug Active Memory.
- Baris trace dapat muncul di `/status` dan sebagai pesan diagnostik lanjutan setelah balasan asisten normal.
## Visibilitas reasoning (/reasoning)
## Visibilitas penalaran (`/reasoning`)
- Level: `on|off|stream`.
- Pesan yang hanya berupa direktif mengaktifkan/mematikan apakah blok thinking ditampilkan dalam balasan.
- Saat diaktifkan, reasoning dikirim sebagai **pesan terpisah** dengan prefiks `Reasoning:`.
- `stream` (khusus Telegram): men-stream reasoning ke bubble draf Telegram saat balasan sedang dibuat, lalu mengirim jawaban final tanpa reasoning.
- Tingkat: `on|off|stream`.
- Pesan yang hanya berisi direktif mengaktifkan apakah blok thinking ditampilkan dalam balasan.
- Saat diaktifkan, penalaran dikirim sebagai **pesan terpisah** dengan prefiks `Reasoning:`.
- `stream` (khusus Telegram): men-stream penalaran ke bubble draf Telegram saat balasan sedang dibuat, lalu mengirim jawaban akhir tanpa penalaran.
- Alias: `/reason`.
- Kirim `/reasoning` (atau `/reasoning:`) tanpa argumen untuk melihat level reasoning saat ini.
- Kirim `/reasoning` (atau `/reasoning:`) tanpa argumen untuk melihat tingkat penalaran saat ini.
- Urutan resolusi: direktif inline, lalu override sesi, lalu default per-agent (`agents.list[].reasoningDefault`), lalu fallback (`off`).
## Terkait
- Dokumentasi mode elevated ada di [Mode elevated](/id/tools/elevated).
- Dokumentasi mode elevated ada di [Elevated mode](/id/tools/elevated).
## Heartbeat
- Body probe Heartbeat adalah prompt Heartbeat yang dikonfigurasi (default: `Read HEARTBEAT.md if it exists (workspace context). Follow it strictly. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK.`). Direktif inline dalam pesan Heartbeat berlaku seperti biasa (tetapi hindari mengubah default sesi dari Heartbeat).
- Pengiriman Heartbeat default ke payload final saja. Untuk juga mengirim pesan `Reasoning:` terpisah (saat tersedia), setel `agents.defaults.heartbeat.includeReasoning: true` atau per-agent `agents.list[].heartbeat.includeReasoning: true`.
- Isi probe Heartbeat adalah prompt heartbeat yang dikonfigurasi (default: `Read HEARTBEAT.md if it exists (workspace context). Follow it strictly. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK.`). Direktif inline dalam pesan heartbeat berlaku seperti biasa (tetapi hindari mengubah default sesi dari heartbeat).
- Pengiriman Heartbeat default ke payload akhir saja. Untuk juga mengirim pesan `Reasoning:` terpisah (bila tersedia), setel `agents.defaults.heartbeat.includeReasoning: true` atau per-agent `agents.list[].heartbeat.includeReasoning: true`.
## UI obrolan web
## UI web chat
- Pemilih thinking pada obrolan web mencerminkan level tersimpan sesi dari penyimpanan/config sesi masuk saat halaman dimuat.
- Memilih level lain menulis override sesi secara langsung melalui `sessions.patch`; ini tidak menunggu pengiriman berikutnya dan bukan override sekali pakai `thinkingOnce`.
- Opsi pertama selalu `Default (<resolved level>)`, di mana default hasil resolve berasal dari profil thinking provider model sesi aktif.
- Picker menggunakan `thinkingOptions` yang dikembalikan oleh baris sesi Gateway. UI browser tidak menyimpan daftar regex provider-nya sendiri; Plugin memiliki kumpulan level spesifik model.
- `/think:<level>` tetap berfungsi dan memperbarui level sesi tersimpan yang sama, sehingga direktif obrolan dan picker tetap sinkron.
- Pemilih thinking web chat mencerminkan tingkat tersimpan sesi dari inbound session store/config saat halaman dimuat.
- Memilih tingkat lain langsung menulis override sesi melalui `sessions.patch`; ini tidak menunggu pengiriman berikutnya dan bukan override `thinkingOnce` sekali pakai.
- Opsi pertama selalu `Default (<resolved level>)`, dengan default teresolusikan berasal dari profil thinking provider model sesi aktif plus logika fallback yang sama yang digunakan `/status` dan `session_status`.
- Pemilih menggunakan `thinkingOptions` yang dikembalikan oleh baris sesi gateway. UI browser tidak menyimpan daftar regex provider sendiri; plugin memiliki kumpulan tingkat spesifik model.
- `/think:<level>` tetap berfungsi dan memperbarui tingkat sesi tersimpan yang sama, sehingga direktif chat dan pemilih tetap sinkron.
## Profil provider
- Plugin provider dapat mengekspos `resolveThinkingProfile(ctx)` untuk menentukan level yang didukung model dan default-nya.
- Setiap level profil memiliki `id` kanonis tersimpan (`off`, `minimal`, `low`, `medium`, `high`, `xhigh`, `adaptive`, atau `max`) dan dapat menyertakan `label` tampilan. Provider biner menggunakan `{ id: "low", label: "on" }`.
- Hook legacy yang dipublikasikan (`supportsXHighThinking`, `isBinaryThinking`, dan `resolveDefaultThinkingLevel`) tetap ada sebagai adapter kompatibilitas, tetapi kumpulan level kustom baru seharusnya menggunakan `resolveThinkingProfile`.
- Baris Gateway mengekspos `thinkingOptions` dan `thinkingDefault` sehingga klien ACP/chat merender profil yang sama dengan yang digunakan validasi runtime.
- Plugin provider dapat mengekspos `resolveThinkingProfile(ctx)` untuk menentukan tingkat dan default model yang didukung.
- Setiap tingkat profil memiliki `id` kanonis tersimpan (`off`, `minimal`, `low`, `medium`, `high`, `xhigh`, `adaptive`, atau `max`) dan dapat menyertakan `label` tampilan. Provider biner menggunakan `{ id: "low", label: "on" }`.
- Hook lama yang dipublikasikan (`supportsXHighThinking`, `isBinaryThinking`, dan `resolveDefaultThinkingLevel`) tetap ada sebagai adaptor kompatibilitas, tetapi kumpulan tingkat kustom baru sebaiknya menggunakan `resolveThinkingProfile`.
- Baris gateway mengekspos `thinkingOptions` dan `thinkingDefault` sehingga klien ACP/chat merender profil yang sama dengan yang digunakan validasi runtime.