chore(i18n): refresh id translations
This commit is contained in:
parent
0e5320bb19
commit
effa7d3771
157
docs/id/channels/matrix-push-rules.md
Normal file
157
docs/id/channels/matrix-push-rules.md
Normal file
@ -0,0 +1,157 @@
|
||||
---
|
||||
read_when:
|
||||
- Menyiapkan streaming senyap Matrix untuk Synapse atau Tuwunel yang di-host sendiri
|
||||
- Pengguna menginginkan notifikasi hanya pada blok yang selesai, bukan pada setiap edit pratinjau
|
||||
summary: Aturan push Matrix per penerima untuk edit pratinjau final yang senyap
|
||||
title: Aturan push Matrix untuk pratinjau senyap
|
||||
x-i18n:
|
||||
generated_at: "2026-04-23T14:55:28Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: dbfdf2552ca352858d4e8d03a2a0f5f3b420d33b01063c111c0335c0229f0534
|
||||
source_path: channels/matrix-push-rules.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
# Aturan push Matrix untuk pratinjau senyap
|
||||
|
||||
Saat `channels.matrix.streaming` bernilai `"quiet"`, OpenClaw mengedit satu event pratinjau di tempat dan menandai edit yang telah difinalkan dengan flag konten kustom. Klien Matrix hanya memberi notifikasi pada edit final jika aturan push per pengguna cocok dengan flag tersebut. Halaman ini ditujukan untuk operator yang meng-host Matrix sendiri dan ingin memasang aturan itu untuk setiap akun penerima.
|
||||
|
||||
Jika Anda hanya menginginkan perilaku notifikasi Matrix bawaan, gunakan `streaming: "partial"` atau biarkan streaming nonaktif. Lihat [penyiapan channel Matrix](/id/channels/matrix#streaming-previews).
|
||||
|
||||
## Prasyarat
|
||||
|
||||
- pengguna penerima = orang yang harus menerima notifikasi
|
||||
- pengguna bot = akun Matrix OpenClaw yang mengirim balasan
|
||||
- gunakan access token pengguna penerima untuk panggilan API di bawah ini
|
||||
- cocokkan `sender` dalam aturan push dengan MXID lengkap pengguna bot
|
||||
- akun penerima harus sudah memiliki pusher yang berfungsi — aturan pratinjau senyap hanya berfungsi jika pengiriman push Matrix normal dalam keadaan sehat
|
||||
|
||||
## Langkah-langkah
|
||||
|
||||
<Steps>
|
||||
<Step title="Konfigurasikan pratinjau senyap">
|
||||
|
||||
```json5
|
||||
{
|
||||
channels: {
|
||||
matrix: {
|
||||
streaming: "quiet",
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="Dapatkan access token penerima">
|
||||
Gunakan ulang token sesi klien yang sudah ada jika memungkinkan. Untuk membuat yang baru:
|
||||
|
||||
```bash
|
||||
curl -sS -X POST \
|
||||
"https://matrix.example.org/_matrix/client/v3/login" \
|
||||
-H "Content-Type: application/json" \
|
||||
--data '{
|
||||
"type": "m.login.password",
|
||||
"identifier": { "type": "m.id.user", "user": "@alice:example.org" },
|
||||
"password": "REDACTED"
|
||||
}'
|
||||
```
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="Verifikasi bahwa pusher ada">
|
||||
|
||||
```bash
|
||||
curl -sS \
|
||||
-H "Authorization: Bearer $USER_ACCESS_TOKEN" \
|
||||
"https://matrix.example.org/_matrix/client/v3/pushers"
|
||||
```
|
||||
|
||||
Jika tidak ada pusher yang dikembalikan, perbaiki pengiriman push Matrix normal untuk akun ini sebelum melanjutkan.
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="Pasang aturan push override">
|
||||
OpenClaw menandai edit pratinjau finalized yang hanya berisi teks dengan `content["com.openclaw.finalized_preview"] = true`. Pasang aturan yang cocok dengan penanda tersebut serta MXID bot sebagai sender:
|
||||
|
||||
```bash
|
||||
curl -sS -X PUT \
|
||||
"https://matrix.example.org/_matrix/client/v3/pushrules/global/override/openclaw-finalized-preview-botname" \
|
||||
-H "Authorization: Bearer $USER_ACCESS_TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
--data '{
|
||||
"conditions": [
|
||||
{ "kind": "event_match", "key": "type", "pattern": "m.room.message" },
|
||||
{
|
||||
"kind": "event_property_is",
|
||||
"key": "content.m\\.relates_to.rel_type",
|
||||
"value": "m.replace"
|
||||
},
|
||||
{
|
||||
"kind": "event_property_is",
|
||||
"key": "content.com\\.openclaw\\.finalized_preview",
|
||||
"value": true
|
||||
},
|
||||
{ "kind": "event_match", "key": "sender", "pattern": "@bot:example.org" }
|
||||
],
|
||||
"actions": [
|
||||
"notify",
|
||||
{ "set_tweak": "sound", "value": "default" },
|
||||
{ "set_tweak": "highlight", "value": false }
|
||||
]
|
||||
}'
|
||||
```
|
||||
|
||||
Ganti sebelum menjalankan:
|
||||
|
||||
- `https://matrix.example.org`: URL dasar homeserver Anda
|
||||
- `$USER_ACCESS_TOKEN`: access token pengguna penerima
|
||||
- `openclaw-finalized-preview-botname`: ID aturan yang unik per bot per penerima (pola: `openclaw-finalized-preview-<botname>`)
|
||||
- `@bot:example.org`: MXID bot OpenClaw Anda, bukan milik penerima
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="Verifikasi">
|
||||
|
||||
```bash
|
||||
curl -sS \
|
||||
-H "Authorization: Bearer $USER_ACCESS_TOKEN" \
|
||||
"https://matrix.example.org/_matrix/client/v3/pushrules/global/override/openclaw-finalized-preview-botname"
|
||||
```
|
||||
|
||||
Lalu uji balasan yang di-streaming. Dalam mode senyap, room menampilkan pratinjau draf senyap dan memberi notifikasi satu kali saat blok atau giliran selesai.
|
||||
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
Untuk menghapus aturan nanti, lakukan `DELETE` pada URL aturan yang sama dengan token penerima.
|
||||
|
||||
## Catatan multi-bot
|
||||
|
||||
Aturan push dikunci oleh `ruleId`: menjalankan ulang `PUT` terhadap ID yang sama akan memperbarui satu aturan. Untuk beberapa bot OpenClaw yang memberi notifikasi kepada penerima yang sama, buat satu aturan per bot dengan kecocokan sender yang berbeda.
|
||||
|
||||
Aturan `override` baru yang ditentukan pengguna disisipkan sebelum aturan penekanan bawaan, jadi tidak diperlukan parameter pengurutan tambahan. Aturan ini hanya memengaruhi edit pratinjau hanya-teks yang bisa difinalkan di tempat; fallback media dan fallback pratinjau kedaluwarsa menggunakan pengiriman Matrix normal.
|
||||
|
||||
## Catatan homeserver
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="Synapse">
|
||||
Tidak diperlukan perubahan `homeserver.yaml` khusus. Jika notifikasi Matrix normal sudah sampai ke pengguna ini, token penerima + panggilan `pushrules` di atas adalah langkah penyiapan utama.
|
||||
|
||||
Jika Anda menjalankan Synapse di belakang reverse proxy atau workers, pastikan `/_matrix/client/.../pushrules/` diteruskan ke Synapse dengan benar. Pengiriman push ditangani oleh proses utama atau `synapse.app.pusher` / worker pusher yang dikonfigurasi — pastikan semuanya sehat.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Tuwunel">
|
||||
Alurnya sama seperti Synapse; tidak diperlukan konfigurasi khusus Tuwunel untuk penanda pratinjau finalized.
|
||||
|
||||
Jika notifikasi menghilang saat pengguna aktif di perangkat lain, periksa apakah `suppress_push_when_active` diaktifkan. Tuwunel menambahkan opsi ini di 1.4.2 (September 2025) dan opsi ini dapat dengan sengaja menekan push ke perangkat lain saat satu perangkat aktif.
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
## Terkait
|
||||
|
||||
- [Penyiapan channel Matrix](/id/channels/matrix)
|
||||
- [Konsep streaming](/id/concepts/streaming)
|
||||
File diff suppressed because it is too large
Load Diff
105
docs/id/ci.md
105
docs/id/ci.md
@ -1,107 +1,108 @@
|
||||
---
|
||||
read_when:
|
||||
- Anda perlu memahami mengapa sebuah pekerjaan CI dijalankan atau tidak dijalankan
|
||||
- Anda perlu memahami mengapa sebuah pekerjaan CI berjalan atau tidak berjalan
|
||||
- Anda sedang men-debug pemeriksaan GitHub Actions yang gagal
|
||||
summary: Graf pekerjaan CI, gerbang cakupan, dan padanan perintah lokal
|
||||
summary: Grafik pekerjaan CI, gerbang cakupan, dan padanan perintah lokal
|
||||
title: Pipeline CI
|
||||
x-i18n:
|
||||
generated_at: "2026-04-23T13:58:13Z"
|
||||
generated_at: "2026-04-23T14:55:27Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: c5a8ea0d8e428826169b0e6aced1caeb993106fe79904002125ace86b48cae1f
|
||||
source_hash: e9a03440ae28a15167fc08d9c66bb1fd719ddfa1517aaecb119c80f2ad826c0d
|
||||
source_path: ci.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
# Pipeline CI
|
||||
|
||||
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.
|
||||
CI berjalan pada setiap push ke `main` dan setiap pull request. CI menggunakan cakupan cerdas untuk melewati pekerjaan mahal ketika hanya area yang tidak terkait yang berubah.
|
||||
|
||||
QA Lab memiliki lane CI khusus di luar workflow utama yang dibatasi cakupan secara cerdas. Workflow
|
||||
QA Lab memiliki lane CI khusus di luar workflow utama dengan cakupan cerdas. Workflow
|
||||
`Parity gate` berjalan pada perubahan PR yang cocok dan manual dispatch; workflow ini
|
||||
membangun runtime QA privat dan membandingkan paket agentic mock GPT-5.4 dan Opus 4.6.
|
||||
membangun runtime QA privat dan membandingkan paket agentic tiruan GPT-5.4 dan Opus 4.6.
|
||||
Workflow `QA-Lab - All Lanes` berjalan setiap malam di `main` dan pada
|
||||
manual dispatch; workflow ini menyebarkan parity gate mock, lane Matrix live, dan lane
|
||||
manual dispatch; workflow ini menyebarkan mock parity gate, 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 Pekerjaan
|
||||
|
||||
| Pekerjaan | Tujuan | Kapan dijalankan |
|
||||
| Job | 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 |
|
||||
| `preflight` | Mendeteksi perubahan khusus docs, cakupan yang berubah, ekstensi yang berubah, dan membangun manifes CI | Selalu pada push dan PR non-draf |
|
||||
| `security-scm-fast` | Deteksi private key dan audit workflow melalui `zizmor` | Selalu pada push dan PR non-draf |
|
||||
| `security-dependency-audit` | Audit lockfile produksi tanpa dependensi terhadap advisory npm | Selalu pada push dan PR non-draf |
|
||||
| `security-fast` | Agregat wajib untuk pekerjaan keamanan cepat | Selalu pada push dan PR non-draf |
|
||||
| `build-artifacts` | Membangun `dist/`, UI Control, 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-extensions` | Shard pengujian bundled-plugin penuh di seluruh suite ekstensi | 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 |
|
||||
| `extension-fast` | Pengujian terfokus hanya untuk plugin bundled yang berubah | Pull request dengan perubahan ekstensi |
|
||||
| `check` | Padanan gerbang lokal utama yang di-shard: tipe prod, lint, guard, tipe pengujian, 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 yang sudah dibangun dan smoke memori startup | Perubahan yang relevan dengan Node |
|
||||
| `checks` | Verifikator untuk pengujian channel built-artifact ditambah kompatibilitas Node 22 khusus push | Perubahan yang relevan dengan Node |
|
||||
| `check-docs` | Pemeriksaan pemformatan docs, lint, dan tautan rusak | Docs berubah |
|
||||
| `skills-python` | Ruff + pytest untuk Skills berbasis Python | Perubahan yang relevan dengan Skills Python |
|
||||
| `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 ditambah satu build APK debug | Perubahan yang relevan dengan Android |
|
||||
|
||||
## Urutan Gagal Cepat
|
||||
## Urutan Gagal-Cepat
|
||||
|
||||
Pekerjaan diurutkan agar pemeriksaan murah gagal sebelum pekerjaan mahal berjalan:
|
||||
|
||||
1. `preflight` memutuskan lane mana yang ada. Logika `docs-scope` dan `changed-scope` adalah step di dalam pekerjaan ini, bukan pekerjaan terpisah.
|
||||
1. `preflight` menentukan lane mana saja yang ada. Logika `docs-scope` dan `changed-scope` adalah langkah 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. 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`.
|
||||
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 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 cakupan 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 workflow linting, tetapi tidak dengan sendirinya memaksa build native Windows, Android, atau macOS; lane platform tersebut tetap dibatasi pada perubahan sumber platform.
|
||||
Pemeriksaan Node Windows dibatasi pada wrapper proses/path khusus Windows, helper runner npm/pnpm/UI, konfigurasi package manager, dan permukaan workflow CI yang menjalankan lane tersebut; perubahan source, plugin, install-smoke, dan khusus test yang tidak terkait tetap berada di lane Linux Node agar tidak memesan worker Windows 16-vCPU untuk cakupan yang sudah diuji oleh shard test normal.
|
||||
Workflow `install-smoke` yang terpisah menggunakan ulang 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 yang relevan dengan instalasi, packaging, container, perubahan produksi bundled extension, dan permukaan inti plugin/channel/Gateway/Plugin SDK yang diuji oleh pekerjaan smoke Docker. Edit khusus test dan docs tidak memesan worker Docker. Smoke paket QR-nya 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-nya menggunakan ulang image runtime yang dibangun sebelumnya di dalam pekerjaan, sehingga menambah cakupan WebSocket container-ke-container nyata tanpa menambah build Docker lain. Agregat lokal `test:docker:all` melakukan prebuild satu image live-test bersama dan satu image built-app `scripts/e2e/Dockerfile` bersama, lalu menjalankan lane smoke live/E2E secara paralel dengan `OPENCLAW_SKIP_DOCKER_BUILD=1`; sesuaikan konkurensi bawaan 4 dengan `OPENCLAW_DOCKER_ALL_PARALLELISM`. Agregat lokal secara bawaan berhenti menjadwalkan lane pool baru setelah kegagalan pertama, dan setiap 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 yang dapat digunakan ulang mencerminkan pola shared-image 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 fokus-instalasi mereka sendiri. Pekerjaan `docker-e2e-fast` yang terpisah menjalankan profil Docker bundled-plugin yang dibatasi dengan command timeout 120 detik: perbaikan dependensi setup-entry ditambah isolasi kegagalan bundled-loader sintetis. Matriks update/channel bundled penuh tetap manual/full-suite karena melakukan pass update npm nyata dan perbaikan doctor berulang.
|
||||
|
||||
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.
|
||||
Logika changed-lane lokal berada di `scripts/changed-lanes.mjs` dan dijalankan oleh `scripts/check-changed.mjs`. Gerbang lokal itu lebih ketat terhadap boundary arsitektur dibanding cakupan platform CI yang luas: perubahan produksi inti menjalankan typecheck prod inti ditambah pengujian inti, perubahan khusus test inti hanya menjalankan typecheck/pengujian test inti, perubahan produksi ekstensi menjalankan typecheck prod ekstensi ditambah pengujian ekstensi, dan perubahan khusus test ekstensi hanya menjalankan typecheck/pengujian test ekstensi. Perubahan Plugin SDK publik atau plugin-contract diperluas ke validasi ekstensi karena ekstensi bergantung pada kontrak inti tersebut. Kenaikan versi khusus metadata rilis menjalankan pemeriksaan terarah untuk versi/konfigurasi/dependensi root. Perubahan root/konfigurasi yang tidak diketahui gagal-aman ke semua lane.
|
||||
|
||||
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.
|
||||
Pada push, matriks `checks` menambahkan lane `compat-node22` khusus push. Pada pull request, lane itu dilewati dan matriks tetap berfokus pada lane test/channel normal.
|
||||
|
||||
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`.
|
||||
Keluarga pengujian Node yang paling lambat dipisah atau diseimbangkan agar setiap pekerjaan tetap kecil tanpa memesan runner secara berlebihan: kontrak channel berjalan sebagai tiga shard berbobot, pengujian bundled plugin diseimbangkan di enam worker ekstensi, lane unit inti kecil dipasangkan, auto-reply berjalan sebagai tiga worker seimbang alih-alih enam worker kecil, dan konfigurasi agentic gateway/plugin disebarkan ke pekerjaan agentic Node khusus source yang sudah ada alih-alih menunggu built artifact. Pengujian browser luas, QA, media, dan plugin lain-lain menggunakan konfigurasi Vitest khusus mereka alih-alih catch-all plugin bersama. Lane agents yang luas menggunakan scheduler paralel-berkas Vitest bersama karena didominasi import/penjadwalan, bukan dimiliki oleh satu file test lambat. `runtime-config` berjalan bersama shard infra core-runtime agar shard runtime bersama tidak menanggung ekor. `check-additional` menjaga pekerjaan compile/canary package-boundary tetap bersama dan memisahkan arsitektur topologi runtime dari cakupan gateway watch; shard boundary guard menjalankan guard independen kecilnya secara bersamaan di dalam satu pekerjaan. Gateway watch, pengujian channel, dan shard boundary dukungan inti berjalan bersamaan di dalam `build-artifacts` setelah `dist/` dan `dist-runtime/` sudah dibangun, mempertahankan nama pemeriksaan lama mereka sebagai pekerjaan verifikator 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 manifes terpisah; lane unit-test-nya 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 run push sudah menjalankan shard plugin bundled penuh. Ini mempertahankan 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 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.
|
||||
GitHub dapat menandai pekerjaan yang digantikan sebagai `cancelled` ketika push yang lebih baru masuk pada PR atau ref `main` yang sama. Anggap itu sebagai noise CI kecuali run terbaru untuk ref yang sama juga gagal. Pemeriksaan shard agregat menggunakan `!cancelled() && always()` agar tetap melaporkan kegagalan shard normal tetapi tidak antre setelah seluruh workflow sudah digantikan.
|
||||
Kunci konkurensi CI diberi versi (`CI-v7-*`) agar zombie sisi GitHub dalam grup antrean lama tidak dapat memblokir run `main` yang lebih baru tanpa batas waktu.
|
||||
|
||||
## Runner
|
||||
|
||||
| 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` |
|
||||
| Runner | Pekerjaan |
|
||||
| -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| `ubuntu-24.04` | `preflight`, pekerjaan keamanan cepat dan agregat (`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`, verifikator 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 Linux Node, 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 fallback ke `macos-latest` |
|
||||
| `blacksmith-12vcpu-macos-latest` | `macos-swift` pada `openclaw/openclaw`; fork fallback ke `macos-latest` |
|
||||
|
||||
## Padanan Lokal
|
||||
|
||||
```bash
|
||||
pnpm changed:lanes # periksa classifier changed-lane lokal untuk origin/main...HEAD
|
||||
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 changed:lanes # inspect the local changed-lane classifier for origin/main...HEAD
|
||||
pnpm check:changed # smart local gate: changed typecheck/lint/tests by boundary lane
|
||||
pnpm check # fast local gate: production tsgo + sharded lint + parallel fast guards
|
||||
pnpm check:test-types
|
||||
pnpm check:timed # gerbang yang sama dengan timing per tahap
|
||||
pnpm check:timed # same gate with per-stage timings
|
||||
pnpm build:strict-smoke
|
||||
pnpm check:architecture
|
||||
pnpm test:gateway:watch-regression
|
||||
pnpm test # pengujian vitest
|
||||
pnpm test # vitest tests
|
||||
pnpm test:channels
|
||||
pnpm test:contracts:channels
|
||||
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
|
||||
pnpm check:docs # docs format + lint + broken links
|
||||
pnpm build # build dist when CI artifact/build-smoke lanes matter
|
||||
node scripts/ci-run-timings.mjs <run-id> # summarize wall time, queue time, and slowest jobs
|
||||
node scripts/ci-run-timings.mjs --recent 10 # compare recent successful main CI runs
|
||||
```
|
||||
|
||||
@ -2,13 +2,13 @@
|
||||
read_when:
|
||||
- Men-debug autentikasi model atau kedaluwarsa OAuth
|
||||
- Mendokumentasikan autentikasi atau penyimpanan kredensial
|
||||
summary: 'Autentikasi model: OAuth, API key, penggunaan ulang Claude CLI, dan setup-token Anthropic'
|
||||
summary: 'Autentikasi model: OAuth, kunci API, penggunaan ulang Claude CLI, dan token penyiapan Anthropic'
|
||||
title: Autentikasi
|
||||
x-i18n:
|
||||
generated_at: "2026-04-07T09:13:46Z"
|
||||
generated_at: "2026-04-23T14:55:27Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: 9db0ad9eccd7e3e3ca328adaad260bc4288a8ccdbe2dc0c24d9fd049b7ab9231
|
||||
source_hash: 37a7c20872b915d1d079f0578c933e43cbdb97eca1c60d8c4e6e5137ca83f8b2
|
||||
source_path: gateway/authentication.md
|
||||
workflow: 15
|
||||
---
|
||||
@ -16,35 +16,30 @@ x-i18n:
|
||||
# Autentikasi (Penyedia Model)
|
||||
|
||||
<Note>
|
||||
Halaman ini membahas autentikasi **penyedia model** (API key, OAuth, penggunaan ulang Claude CLI, dan setup-token Anthropic). Untuk autentikasi **koneksi gateway** (token, password, trusted-proxy), lihat [Configuration](/id/gateway/configuration) dan [Trusted Proxy Auth](/id/gateway/trusted-proxy-auth).
|
||||
Halaman ini membahas autentikasi **penyedia model** (kunci API, OAuth, penggunaan ulang Claude CLI, dan token penyiapan Anthropic). Untuk autentikasi **koneksi Gateway** (token, kata sandi, trusted-proxy), lihat [Konfigurasi](/id/gateway/configuration) dan [Autentikasi Trusted Proxy](/id/gateway/trusted-proxy-auth).
|
||||
</Note>
|
||||
|
||||
OpenClaw mendukung OAuth dan API key untuk penyedia model. Untuk host gateway
|
||||
yang selalu aktif, API key biasanya merupakan opsi yang paling dapat diprediksi. Alur
|
||||
langganan/OAuth juga didukung ketika sesuai dengan model akun penyedia Anda.
|
||||
OpenClaw mendukung OAuth dan kunci API untuk penyedia model. Untuk host Gateway yang selalu aktif, kunci API biasanya merupakan opsi yang paling mudah diprediksi. Alur langganan/OAuth juga didukung saat sesuai dengan model akun penyedia Anda.
|
||||
|
||||
Lihat [/concepts/oauth](/id/concepts/oauth) untuk alur OAuth lengkap dan tata letak
|
||||
penyimpanan.
|
||||
Untuk autentikasi berbasis SecretRef (penyedia `env`/`file`/`exec`), lihat [Secrets Management](/id/gateway/secrets).
|
||||
Lihat [/concepts/oauth](/id/concepts/oauth) untuk alur OAuth lengkap dan tata letak penyimpanan.
|
||||
Untuk autentikasi berbasis SecretRef (`env`/`file`/`exec` providers), lihat [Manajemen Rahasia](/id/gateway/secrets).
|
||||
Untuk aturan kelayakan kredensial/kode alasan yang digunakan oleh `models status --probe`, lihat
|
||||
[Auth Credential Semantics](/id/auth-credential-semantics).
|
||||
[Semantik Kredensial Auth](/id/auth-credential-semantics).
|
||||
|
||||
## Penyiapan yang direkomendasikan (API key, penyedia apa pun)
|
||||
## Penyiapan yang direkomendasikan (kunci API, penyedia apa pun)
|
||||
|
||||
Jika Anda menjalankan gateway berumur panjang, mulai dengan API key untuk
|
||||
penyedia pilihan Anda.
|
||||
Khusus untuk Anthropic, autentikasi API key tetap merupakan penyiapan server yang paling dapat diprediksi,
|
||||
tetapi OpenClaw juga mendukung penggunaan ulang login Claude CLI lokal.
|
||||
Jika Anda menjalankan Gateway jangka panjang, mulai dengan kunci API untuk penyedia yang Anda pilih.
|
||||
Khusus untuk Anthropic, autentikasi kunci API tetap merupakan penyiapan server yang paling mudah diprediksi, tetapi OpenClaw juga mendukung penggunaan ulang login Claude CLI lokal.
|
||||
|
||||
1. Buat API key di konsol penyedia Anda.
|
||||
2. Letakkan API key itu di **host gateway** (mesin yang menjalankan `openclaw gateway`).
|
||||
1. Buat kunci API di konsol penyedia Anda.
|
||||
2. Letakkan kunci tersebut di **host Gateway** (mesin yang menjalankan `openclaw gateway`).
|
||||
|
||||
```bash
|
||||
export <PROVIDER>_API_KEY="..."
|
||||
openclaw models status
|
||||
```
|
||||
|
||||
3. Jika Gateway berjalan di bawah systemd/launchd, sebaiknya letakkan key di
|
||||
3. Jika Gateway berjalan di bawah systemd/launchd, sebaiknya letakkan kunci di
|
||||
`~/.openclaw/.env` agar daemon dapat membacanya:
|
||||
|
||||
```bash
|
||||
@ -53,30 +48,42 @@ cat >> ~/.openclaw/.env <<'EOF'
|
||||
EOF
|
||||
```
|
||||
|
||||
Lalu restart daemon (atau restart proses Gateway Anda) dan periksa kembali:
|
||||
Lalu mulai ulang daemon (atau mulai ulang proses Gateway Anda) dan periksa kembali:
|
||||
|
||||
```bash
|
||||
openclaw models status
|
||||
openclaw doctor
|
||||
```
|
||||
|
||||
Jika Anda lebih memilih untuk tidak mengelola env vars sendiri, onboarding dapat menyimpan
|
||||
API key untuk digunakan daemon: `openclaw onboard`.
|
||||
Jika Anda lebih memilih untuk tidak mengelola variabel env sendiri, onboarding dapat menyimpan
|
||||
kunci API untuk digunakan daemon: `openclaw onboard`.
|
||||
|
||||
Lihat [Help](/id/help) untuk detail tentang pewarisan env (`env.shellEnv`,
|
||||
Lihat [Bantuan](/id/help) untuk detail tentang pewarisan env (`env.shellEnv`,
|
||||
`~/.openclaw/.env`, systemd/launchd).
|
||||
|
||||
## Anthropic: kompatibilitas Claude CLI dan token
|
||||
|
||||
Autentikasi setup-token Anthropic masih tersedia di OpenClaw sebagai jalur token
|
||||
yang didukung. Staf Anthropic sejak itu memberi tahu kami bahwa penggunaan Claude CLI bergaya OpenClaw
|
||||
diizinkan kembali, sehingga OpenClaw memperlakukan penggunaan ulang Claude CLI dan penggunaan `claude -p` sebagai
|
||||
sesuatu yang disetujui untuk integrasi ini kecuali Anthropic menerbitkan kebijakan baru. Saat
|
||||
penggunaan ulang Claude CLI tersedia pada host, itu sekarang menjadi jalur yang lebih disukai.
|
||||
Autentikasi token penyiapan Anthropic masih tersedia di OpenClaw sebagai jalur token yang didukung. Staf Anthropic sejak itu memberi tahu kami bahwa penggunaan Claude CLI bergaya OpenClaw diizinkan lagi, sehingga OpenClaw memperlakukan penggunaan ulang Claude CLI dan penggunaan `claude -p` sebagai penggunaan yang disetujui untuk integrasi ini kecuali Anthropic menerbitkan kebijakan baru. Saat penggunaan ulang Claude CLI tersedia di host, itu kini menjadi jalur yang diutamakan.
|
||||
|
||||
Untuk host gateway berumur panjang, API key Anthropic tetap merupakan penyiapan
|
||||
yang paling dapat diprediksi. Jika Anda ingin menggunakan ulang login Claude yang sudah ada di host yang sama,
|
||||
gunakan jalur Anthropic Claude CLI di onboarding/configure.
|
||||
Untuk host Gateway jangka panjang, kunci API Anthropic tetap merupakan penyiapan yang paling mudah diprediksi. Jika Anda ingin menggunakan ulang login Claude yang sudah ada di host yang sama, gunakan jalur Anthropic Claude CLI di onboarding/configure.
|
||||
|
||||
Penyiapan host yang direkomendasikan untuk penggunaan ulang Claude CLI:
|
||||
|
||||
```bash
|
||||
# Jalankan di host Gateway
|
||||
claude auth login
|
||||
claude auth status --text
|
||||
openclaw models auth login --provider anthropic --method cli --set-default
|
||||
```
|
||||
|
||||
Ini adalah penyiapan dua langkah:
|
||||
|
||||
1. Login-kan Claude Code itu sendiri ke Anthropic di host Gateway.
|
||||
2. Beri tahu OpenClaw untuk mengalihkan pemilihan model Anthropic ke backend `claude-cli`
|
||||
lokal dan menyimpan profil auth OpenClaw yang sesuai.
|
||||
|
||||
Jika `claude` tidak ada di `PATH`, instal Claude Code terlebih dahulu atau atur
|
||||
`agents.defaults.cliBackends.claude-cli.command` ke path biner yang sebenarnya.
|
||||
|
||||
Entri token manual (penyedia apa pun; menulis `auth-profiles.json` + memperbarui config):
|
||||
|
||||
@ -86,17 +93,17 @@ openclaw models auth paste-token --provider openrouter
|
||||
|
||||
Referensi profil auth juga didukung untuk kredensial statis:
|
||||
|
||||
- kredensial `api_key` dapat menggunakan `keyRef: { source, provider, id }`
|
||||
- kredensial `token` dapat menggunakan `tokenRef: { source, provider, id }`
|
||||
- profil mode OAuth tidak mendukung kredensial SecretRef; jika `auth.profiles.<id>.mode` disetel ke `"oauth"`, input `keyRef`/`tokenRef` berbasis SecretRef untuk profil tersebut akan ditolak.
|
||||
- Kredensial `api_key` dapat menggunakan `keyRef: { source, provider, id }`
|
||||
- Kredensial `token` dapat menggunakan `tokenRef: { source, provider, id }`
|
||||
- Profil mode OAuth tidak mendukung kredensial SecretRef; jika `auth.profiles.<id>.mode` diatur ke `"oauth"`, input `keyRef`/`tokenRef` berbasis SecretRef untuk profil tersebut akan ditolak.
|
||||
|
||||
Pemeriksaan ramah otomatisasi (exit `1` saat kedaluwarsa/tidak ada, `2` saat akan kedaluwarsa):
|
||||
Pemeriksaan yang ramah otomasi (keluar dengan `1` saat kedaluwarsa/tidak ada, `2` saat akan kedaluwarsa):
|
||||
|
||||
```bash
|
||||
openclaw models status --check
|
||||
```
|
||||
|
||||
Probe auth live:
|
||||
Probe auth langsung:
|
||||
|
||||
```bash
|
||||
openclaw models status --probe
|
||||
@ -105,63 +112,63 @@ openclaw models status --probe
|
||||
Catatan:
|
||||
|
||||
- Baris probe dapat berasal dari profil auth, kredensial env, atau `models.json`.
|
||||
- Jika `auth.order.<provider>` eksplisit menghilangkan profil yang disimpan, probe melaporkan
|
||||
- Jika `auth.order.<provider>` yang eksplisit menghilangkan profil tersimpan, probe melaporkan
|
||||
`excluded_by_auth_order` untuk profil tersebut alih-alih mencobanya.
|
||||
- Jika auth ada tetapi OpenClaw tidak dapat menyelesaikan kandidat model yang dapat diprobe untuk
|
||||
- Jika auth ada tetapi OpenClaw tidak dapat menemukan kandidat model yang bisa diprobe untuk
|
||||
penyedia tersebut, probe melaporkan `status: no_model`.
|
||||
- Cooldown rate limit dapat dicakup per model. Profil yang sedang cooldown untuk satu
|
||||
- Cooldown rate-limit dapat bersifat spesifik per model. Profil yang sedang cooldown untuk satu
|
||||
model masih dapat digunakan untuk model saudara pada penyedia yang sama.
|
||||
|
||||
Skrip ops opsional (systemd/Termux) didokumentasikan di sini:
|
||||
[Auth monitoring scripts](/id/help/scripts#auth-monitoring-scripts)
|
||||
Script operasi opsional (systemd/Termux) didokumentasikan di sini:
|
||||
[Script pemantauan auth](/id/help/scripts#auth-monitoring-scripts)
|
||||
|
||||
## Catatan Anthropic
|
||||
|
||||
Backend Anthropic `claude-cli` didukung kembali.
|
||||
Backend Anthropic `claude-cli` didukung lagi.
|
||||
|
||||
- Staf Anthropic memberi tahu kami bahwa jalur integrasi OpenClaw ini diizinkan kembali.
|
||||
- Karena itu, OpenClaw memperlakukan penggunaan ulang Claude CLI dan penggunaan `claude -p` sebagai
|
||||
sesuatu yang disetujui untuk proses berbasis Anthropic kecuali Anthropic menerbitkan kebijakan baru.
|
||||
- API key Anthropic tetap menjadi pilihan yang paling dapat diprediksi untuk host gateway
|
||||
berumur panjang dan kontrol penagihan sisi server yang eksplisit.
|
||||
- Staf Anthropic memberi tahu kami bahwa jalur integrasi OpenClaw ini diizinkan lagi.
|
||||
- Oleh karena itu, OpenClaw memperlakukan penggunaan ulang Claude CLI dan penggunaan `claude -p` sebagai penggunaan yang disetujui
|
||||
untuk proses berbasis Anthropic kecuali Anthropic menerbitkan kebijakan baru.
|
||||
- Kunci API Anthropic tetap menjadi pilihan yang paling mudah diprediksi untuk host Gateway
|
||||
jangka panjang dan kontrol penagihan sisi server yang eksplisit.
|
||||
|
||||
## Memeriksa status autentikasi model
|
||||
## Memeriksa status auth model
|
||||
|
||||
```bash
|
||||
openclaw models status
|
||||
openclaw doctor
|
||||
```
|
||||
|
||||
## Perilaku rotasi API key (gateway)
|
||||
## Perilaku rotasi kunci API (Gateway)
|
||||
|
||||
Beberapa penyedia mendukung percobaan ulang permintaan dengan key alternatif saat panggilan API
|
||||
mencapai rate limit penyedia.
|
||||
Beberapa penyedia mendukung percobaan ulang permintaan dengan kunci alternatif saat panggilan API
|
||||
mencapai batas rate-limit penyedia.
|
||||
|
||||
- Urutan prioritas:
|
||||
- `OPENCLAW_LIVE_<PROVIDER>_KEY` (override tunggal)
|
||||
- `OPENCLAW_LIVE_<PROVIDER>_KEY` (satu override)
|
||||
- `<PROVIDER>_API_KEYS`
|
||||
- `<PROVIDER>_API_KEY`
|
||||
- `<PROVIDER>_API_KEY_*`
|
||||
- Penyedia Google juga menyertakan `GOOGLE_API_KEY` sebagai fallback tambahan.
|
||||
- Daftar key yang sama dideduplikasi sebelum digunakan.
|
||||
- OpenClaw mencoba ulang dengan key berikutnya hanya untuk error rate limit (misalnya
|
||||
- Daftar kunci yang sama dihapus duplikasinya sebelum digunakan.
|
||||
- OpenClaw mencoba ulang dengan kunci berikutnya hanya untuk kesalahan rate-limit (misalnya
|
||||
`429`, `rate_limit`, `quota`, `resource exhausted`, `Too many concurrent
|
||||
requests`, `ThrottlingException`, `concurrency limit reached`, atau
|
||||
`workers_ai ... quota limit exceeded`).
|
||||
- Error non-rate-limit tidak dicoba ulang dengan key alternatif.
|
||||
- Jika semua key gagal, error akhir dari percobaan terakhir akan dikembalikan.
|
||||
- Kesalahan non-rate-limit tidak dicoba ulang dengan kunci alternatif.
|
||||
- Jika semua kunci gagal, kesalahan akhir dari percobaan terakhir akan dikembalikan.
|
||||
|
||||
## Mengontrol kredensial mana yang digunakan
|
||||
## Mengontrol kredensial yang digunakan
|
||||
|
||||
### Per sesi (perintah chat)
|
||||
|
||||
Gunakan `/model <alias-or-id>@<profileId>` untuk menetapkan kredensial penyedia tertentu bagi sesi saat ini (contoh id profil: `anthropic:default`, `anthropic:work`).
|
||||
Gunakan `/model <alias-or-id>@<profileId>` untuk menyematkan kredensial penyedia tertentu untuk sesi saat ini (contoh id profil: `anthropic:default`, `anthropic:work`).
|
||||
|
||||
Gunakan `/model` (atau `/model list`) untuk pemilih ringkas; gunakan `/model status` untuk tampilan penuh (kandidat + profil auth berikutnya, serta detail endpoint penyedia jika dikonfigurasi).
|
||||
Gunakan `/model` (atau `/model list`) untuk pemilih ringkas; gunakan `/model status` untuk tampilan penuh (kandidat + profil auth berikutnya, serta detail endpoint penyedia saat dikonfigurasi).
|
||||
|
||||
### Per agen (override CLI)
|
||||
|
||||
Setel override urutan profil auth eksplisit untuk agen (disimpan di `auth-state.json` agen tersebut):
|
||||
Atur override urutan profil auth yang eksplisit untuk sebuah agen (disimpan dalam `auth-state.json` agen tersebut):
|
||||
|
||||
```bash
|
||||
openclaw models auth order get --provider anthropic
|
||||
@ -172,15 +179,15 @@ openclaw models auth order clear --provider anthropic
|
||||
Gunakan `--agent <id>` untuk menargetkan agen tertentu; hilangkan untuk menggunakan agen default yang dikonfigurasi.
|
||||
Saat Anda men-debug masalah urutan, `openclaw models status --probe` menampilkan profil tersimpan
|
||||
yang dihilangkan sebagai `excluded_by_auth_order` alih-alih melewatinya secara diam-diam.
|
||||
Saat Anda men-debug masalah cooldown, ingat bahwa cooldown rate limit dapat terikat
|
||||
Saat Anda men-debug masalah cooldown, ingat bahwa cooldown rate-limit dapat terikat
|
||||
pada satu id model, bukan seluruh profil penyedia.
|
||||
|
||||
## Pemecahan masalah
|
||||
|
||||
### "No credentials found"
|
||||
### "Tidak ada kredensial ditemukan"
|
||||
|
||||
Jika profil Anthropic tidak ada, konfigurasikan API key Anthropic di
|
||||
**host gateway** atau siapkan jalur setup-token Anthropic, lalu periksa kembali:
|
||||
Jika profil Anthropic tidak ada, konfigurasikan kunci API Anthropic pada
|
||||
**host Gateway** atau siapkan jalur token penyiapan Anthropic, lalu periksa kembali:
|
||||
|
||||
```bash
|
||||
openclaw models status
|
||||
@ -190,4 +197,4 @@ openclaw models status
|
||||
|
||||
Jalankan `openclaw models status` untuk mengonfirmasi profil mana yang akan kedaluwarsa. Jika profil token
|
||||
Anthropic tidak ada atau sudah kedaluwarsa, segarkan penyiapan tersebut melalui
|
||||
setup-token atau migrasikan ke API key Anthropic.
|
||||
token penyiapan atau migrasikan ke kunci API Anthropic.
|
||||
|
||||
@ -1,38 +1,38 @@
|
||||
---
|
||||
read_when:
|
||||
- Anda ingin fallback yang andal saat provider API gagal
|
||||
- Anda sedang menjalankan Codex CLI atau CLI AI lokal lainnya dan ingin menggunakannya kembali
|
||||
- Anda menginginkan fallback yang andal saat penyedia API gagal
|
||||
- Anda menjalankan Codex CLI atau CLI AI lokal lainnya dan ingin menggunakannya kembali
|
||||
- Anda ingin memahami bridge loopback MCP untuk akses alat backend CLI
|
||||
summary: 'Backend CLI: fallback CLI AI lokal dengan bridge alat MCP opsional'
|
||||
title: Backend CLI
|
||||
x-i18n:
|
||||
generated_at: "2026-04-23T09:20:54Z"
|
||||
generated_at: "2026-04-23T14:55:28Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: 475923b36e4580d3e4e57014ff2e6b89e9eb52c11b0a0ab1fc8241655b07836e
|
||||
source_hash: ff7458d18b8a5b716930579241177917fd3edffcf7f6e211c7d570cf76519316
|
||||
source_path: gateway/cli-backends.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
# Backend CLI (runtime fallback)
|
||||
|
||||
OpenClaw dapat menjalankan **CLI AI lokal** sebagai **fallback hanya-teks** saat provider API sedang down,
|
||||
terkena rate limit, atau sementara bermasalah. Pendekatan ini sengaja konservatif:
|
||||
OpenClaw dapat menjalankan **CLI AI lokal** sebagai **fallback khusus teks** saat penyedia API sedang down,
|
||||
terkena rate limit, atau sementara berperilaku tidak semestinya. Ini sengaja dibuat konservatif:
|
||||
|
||||
- **Alat OpenClaw tidak diinjeksi secara langsung**, tetapi backend dengan `bundleMcp: true`
|
||||
dapat menerima alat gateway melalui bridge loopback MCP.
|
||||
- **Alat OpenClaw tidak disuntikkan secara langsung**, tetapi backend dengan `bundleMcp: true`
|
||||
dapat menerima alat gateway melalui bridge MCP loopback.
|
||||
- **Streaming JSONL** untuk CLI yang mendukungnya.
|
||||
- **Sesi didukung** (jadi giliran tindak lanjut tetap koheren).
|
||||
- **Sesi didukung** (agar giliran lanjutan tetap koheren).
|
||||
- **Gambar dapat diteruskan** jika CLI menerima path gambar.
|
||||
|
||||
Ini dirancang sebagai **jaring pengaman** alih-alih jalur utama. Gunakan ini saat Anda
|
||||
menginginkan respons teks “selalu berfungsi” tanpa bergantung pada API eksternal.
|
||||
Ini dirancang sebagai **jaring pengaman** alih-alih jalur utama. Gunakan ini ketika Anda
|
||||
menginginkan respons teks yang “selalu berfungsi” tanpa bergantung pada API eksternal.
|
||||
|
||||
Jika Anda menginginkan runtime harness penuh dengan kontrol sesi ACP, tugas latar belakang,
|
||||
binding thread/percakapan, dan sesi coding eksternal persisten, gunakan
|
||||
[ACP Agents](/id/tools/acp-agents). Backend CLI bukan ACP.
|
||||
pengikatan thread/percakapan, dan sesi coding eksternal persisten, gunakan
|
||||
[ACP Agents](/id/tools/acp-agents) sebagai gantinya. Backend CLI bukan ACP.
|
||||
|
||||
## Memulai cepat yang ramah pemula
|
||||
## Mulai cepat yang ramah pemula
|
||||
|
||||
Anda dapat menggunakan Codex CLI **tanpa konfigurasi apa pun** (plugin OpenAI bawaan
|
||||
mendaftarkan backend default):
|
||||
@ -42,7 +42,7 @@ openclaw agent --message "hi" --model codex-cli/gpt-5.4
|
||||
```
|
||||
|
||||
Jika gateway Anda berjalan di bawah launchd/systemd dan PATH minimal, tambahkan hanya
|
||||
path perintahnya:
|
||||
path command:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -58,10 +58,10 @@ path perintahnya:
|
||||
}
|
||||
```
|
||||
|
||||
Itu saja. Tidak perlu key, tidak perlu konfigurasi auth tambahan selain yang dimiliki CLI itu sendiri.
|
||||
Itu saja. Tidak perlu key, tidak perlu konfigurasi auth tambahan selain yang dibutuhkan CLI itu sendiri.
|
||||
|
||||
Jika Anda menggunakan backend CLI bawaan sebagai **provider pesan utama** pada
|
||||
host gateway, OpenClaw sekarang otomatis memuat plugin bawaan pemiliknya saat config Anda
|
||||
Jika Anda menggunakan backend CLI bawaan sebagai **penyedia pesan utama** pada host
|
||||
gateway, OpenClaw sekarang akan memuat otomatis plugin bawaan yang memilikinya ketika konfigurasi Anda
|
||||
secara eksplisit merujuk backend tersebut dalam ref model atau di bawah
|
||||
`agents.defaults.cliBackends`.
|
||||
|
||||
@ -89,10 +89,10 @@ Tambahkan backend CLI ke daftar fallback Anda agar hanya berjalan saat model uta
|
||||
Catatan:
|
||||
|
||||
- Jika Anda menggunakan `agents.defaults.models` (allowlist), Anda juga harus menyertakan model backend CLI di sana.
|
||||
- Jika provider utama gagal (auth, rate limit, timeout), OpenClaw akan
|
||||
- Jika penyedia utama gagal (auth, rate limit, timeout), OpenClaw akan
|
||||
mencoba backend CLI berikutnya.
|
||||
|
||||
## Ringkasan konfigurasi
|
||||
## Ikhtisar konfigurasi
|
||||
|
||||
Semua backend CLI berada di bawah:
|
||||
|
||||
@ -100,8 +100,8 @@ Semua backend CLI berada di bawah:
|
||||
agents.defaults.cliBackends
|
||||
```
|
||||
|
||||
Setiap entri dikunci oleh **id provider** (misalnya `codex-cli`, `my-cli`).
|
||||
Id provider menjadi sisi kiri ref model Anda:
|
||||
Setiap entri dikunci dengan **id provider** (misalnya `codex-cli`, `my-cli`).
|
||||
Id provider menjadi sisi kiri dari ref model Anda:
|
||||
|
||||
```
|
||||
<provider>/<model>
|
||||
@ -131,7 +131,7 @@ Id provider menjadi sisi kiri ref model Anda:
|
||||
sessionMode: "existing",
|
||||
sessionIdFields: ["session_id", "conversation_id"],
|
||||
systemPromptArg: "--system",
|
||||
// CLI gaya Codex dapat menunjuk ke file prompt sebagai gantinya:
|
||||
// CLI bergaya Codex dapat menunjuk ke file prompt sebagai gantinya:
|
||||
// systemPromptFileConfigArg: "-c",
|
||||
// systemPromptFileConfigKey: "model_instructions_file",
|
||||
systemPromptWhen: "first",
|
||||
@ -148,95 +148,107 @@ Id provider menjadi sisi kiri ref model Anda:
|
||||
## Cara kerjanya
|
||||
|
||||
1. **Memilih backend** berdasarkan prefiks provider (`codex-cli/...`).
|
||||
2. **Membangun system prompt** menggunakan prompt + konteks workspace OpenClaw yang sama.
|
||||
2. **Membangun system prompt** menggunakan prompt OpenClaw + konteks workspace yang sama.
|
||||
3. **Menjalankan CLI** dengan id sesi (jika didukung) agar riwayat tetap konsisten.
|
||||
Backend `claude-cli` bawaan menjaga proses stdio Claude tetap hidup per
|
||||
sesi OpenClaw dan mengirim giliran tindak lanjut melalui stdin stream-json.
|
||||
sesi OpenClaw dan mengirim giliran lanjutan melalui stdin stream-json.
|
||||
4. **Mengurai output** (JSON atau teks biasa) dan mengembalikan teks akhir.
|
||||
5. **Mempertahankan id sesi** per backend, sehingga tindak lanjut menggunakan kembali sesi CLI yang sama.
|
||||
5. **Menyimpan id sesi** per backend, agar giliran lanjutan menggunakan ulang sesi CLI yang sama.
|
||||
|
||||
<Note>
|
||||
Backend `claude-cli` Anthropic bawaan kembali didukung. Staf Anthropic
|
||||
memberi tahu kami bahwa penggunaan Claude CLI gaya OpenClaw diizinkan lagi, sehingga OpenClaw memperlakukan
|
||||
penggunaan `claude -p` sebagai yang disahkan untuk integrasi ini kecuali Anthropic menerbitkan
|
||||
Backend `claude-cli` Anthropic bawaan kini didukung lagi. Staf Anthropic
|
||||
memberi tahu kami bahwa penggunaan Claude CLI ala OpenClaw kembali diizinkan, jadi OpenClaw memperlakukan
|
||||
penggunaan `claude -p` sebagai hal yang disetujui untuk integrasi ini kecuali Anthropic menerbitkan
|
||||
kebijakan baru.
|
||||
</Note>
|
||||
|
||||
Backend `codex-cli` OpenAI bawaan meneruskan system prompt OpenClaw melalui
|
||||
override config `model_instructions_file` milik Codex (`-c
|
||||
model_instructions_file="..."`). Codex tidak mengekspos flag
|
||||
`--append-system-prompt` gaya Claude, jadi OpenClaw menulis prompt rakitan ke
|
||||
override konfigurasi `model_instructions_file` milik Codex (`-c
|
||||
model_instructions_file="..."`). Codex tidak menyediakan flag
|
||||
`--append-system-prompt` ala Claude, jadi OpenClaw menulis prompt yang telah dirangkai ke
|
||||
file sementara untuk setiap sesi Codex CLI baru.
|
||||
|
||||
Backend `claude-cli` Anthropic bawaan menerima snapshot Skills OpenClaw
|
||||
dengan dua cara: katalog Skills OpenClaw ringkas di appended system prompt, dan
|
||||
dengan dua cara: katalog Skills OpenClaw ringkas dalam system prompt yang ditambahkan, dan
|
||||
Plugin Claude Code sementara yang diteruskan dengan `--plugin-dir`. Plugin tersebut hanya berisi
|
||||
Skills yang memenuhi syarat untuk agen/sesi itu, sehingga resolver skill native Claude Code melihat himpunan terfilter yang sama yang sebaliknya akan diiklankan OpenClaw di
|
||||
prompt. Override env/API key skill tetap diterapkan oleh OpenClaw ke
|
||||
lingkungan proses anak untuk run tersebut.
|
||||
Skills yang memenuhi syarat untuk agent/sesi itu, sehingga resolver skill native Claude Code melihat
|
||||
set terfilter yang sama yang sebaliknya akan diiklankan OpenClaw dalam
|
||||
prompt. Override env/API key skill tetap diterapkan oleh OpenClaw ke environment proses anak untuk eksekusi tersebut.
|
||||
|
||||
Sebelum OpenClaw dapat menggunakan backend `claude-cli` bawaan, Claude Code sendiri
|
||||
harus sudah login di host yang sama:
|
||||
|
||||
```bash
|
||||
claude auth login
|
||||
claude auth status --text
|
||||
openclaw models auth login --provider anthropic --method cli --set-default
|
||||
```
|
||||
|
||||
Gunakan `agents.defaults.cliBackends.claude-cli.command` hanya ketika biner `claude`
|
||||
belum ada di `PATH`.
|
||||
|
||||
## Sesi
|
||||
|
||||
- Jika CLI mendukung sesi, setel `sessionArg` (misalnya `--session-id`) atau
|
||||
- Jika CLI mendukung sesi, set `sessionArg` (misalnya `--session-id`) atau
|
||||
`sessionArgs` (placeholder `{sessionId}`) saat ID perlu disisipkan
|
||||
ke beberapa flag.
|
||||
- Jika CLI menggunakan **subperintah resume** dengan flag yang berbeda, setel
|
||||
`resumeArgs` (menggantikan `args` saat melanjutkan) dan opsional
|
||||
- Jika CLI menggunakan **subcommand resume** dengan flag yang berbeda, set
|
||||
`resumeArgs` (menggantikan `args` saat melanjutkan) dan secara opsional
|
||||
`resumeOutput` (untuk resume non-JSON).
|
||||
- `sessionMode`:
|
||||
- `always`: selalu kirim id sesi (UUID baru jika belum ada yang tersimpan).
|
||||
- `existing`: hanya kirim id sesi jika sebelumnya sudah tersimpan.
|
||||
- `existing`: kirim id sesi hanya jika sebelumnya ada yang tersimpan.
|
||||
- `none`: jangan pernah kirim id sesi.
|
||||
- `claude-cli` default ke `liveSession: "claude-stdio"`, `output: "jsonl"`,
|
||||
dan `input: "stdin"` sehingga giliran tindak lanjut menggunakan kembali proses Claude live saat
|
||||
proses tersebut aktif. Warm stdio sekarang menjadi default, termasuk untuk config kustom
|
||||
yang menghilangkan field transport. Jika Gateway direstart atau proses idle
|
||||
keluar, OpenClaw melanjutkan dari id sesi Claude yang tersimpan. Id sesi yang tersimpan diverifikasi terhadap transkrip proyek yang ada dan dapat dibaca sebelum
|
||||
resume, sehingga binding fantom dihapus dengan `reason=transcript-missing`
|
||||
dan `input: "stdin"` sehingga giliran lanjutan menggunakan ulang proses Claude aktif selagi
|
||||
masih aktif. stdio hangat sekarang menjadi default, termasuk untuk konfigurasi kustom
|
||||
yang menghilangkan field transport. Jika Gateway dimulai ulang atau proses idle
|
||||
berhenti, OpenClaw melanjutkan dari id sesi Claude yang tersimpan. Id sesi yang tersimpan
|
||||
diverifikasi terhadap transkrip project yang ada dan dapat dibaca sebelum
|
||||
resume, sehingga pengikatan phantom dibersihkan dengan `reason=transcript-missing`
|
||||
alih-alih diam-diam memulai sesi Claude CLI baru di bawah `--resume`.
|
||||
- Sesi CLI yang tersimpan adalah kontinuitas milik provider. Reset sesi harian implisit
|
||||
tidak memutusnya; `/reset` dan kebijakan `session.reset` eksplisit tetap
|
||||
memutuskannya.
|
||||
tidak memutuskannya; `/reset` dan kebijakan `session.reset` eksplisit tetap memutuskannya.
|
||||
|
||||
Catatan serialisasi:
|
||||
|
||||
- `serialize: true` menjaga run pada jalur yang sama tetap terurut.
|
||||
- Sebagian besar CLI melakukan serialisasi pada satu jalur provider.
|
||||
- OpenClaw membuang penggunaan ulang sesi CLI yang tersimpan saat identitas auth terpilih berubah,
|
||||
termasuk perubahan id profil auth, API key statis, token statis, atau identitas akun OAuth
|
||||
saat CLI mengekspos salah satunya. Rotasi token akses dan refresh OAuth tidak
|
||||
memutus sesi CLI yang tersimpan. Jika CLI tidak mengekspos id akun OAuth yang stabil,
|
||||
OpenClaw membiarkan CLI tersebut menegakkan izin resume.
|
||||
- `serialize: true` menjaga eksekusi di lane yang sama tetap berurutan.
|
||||
- Sebagian besar CLI menserialkan pada satu lane provider.
|
||||
- OpenClaw menghentikan penggunaan ulang sesi CLI yang tersimpan saat identitas auth yang dipilih berubah,
|
||||
termasuk jika id profil auth berubah, API key statis, token statis, atau identitas akun OAuth saat CLI mengeksposnya. Rotasi
|
||||
access token dan refresh token OAuth tidak memutus sesi CLI yang tersimpan. Jika sebuah CLI tidak mengekspos
|
||||
id akun OAuth yang stabil, OpenClaw membiarkan CLI tersebut menegakkan izin resume.
|
||||
|
||||
## Gambar (pass-through)
|
||||
|
||||
Jika CLI Anda menerima path gambar, setel `imageArg`:
|
||||
Jika CLI Anda menerima path gambar, set `imageArg`:
|
||||
|
||||
```json5
|
||||
imageArg: "--image",
|
||||
imageMode: "repeat"
|
||||
```
|
||||
|
||||
OpenClaw akan menulis gambar base64 ke file sementara. Jika `imageArg` disetel, path tersebut
|
||||
diteruskan sebagai argumen CLI. Jika `imageArg` tidak ada, OpenClaw menambahkan
|
||||
path file ke prompt (injeksi path), yang cukup untuk CLI yang memuat
|
||||
file lokal secara otomatis dari path biasa.
|
||||
OpenClaw akan menulis gambar base64 ke file sementara. Jika `imageArg` diatur, path tersebut
|
||||
diteruskan sebagai arg CLI. Jika `imageArg` tidak ada, OpenClaw menambahkan
|
||||
path file ke prompt (injeksi path), yang cukup untuk CLI yang otomatis
|
||||
memuat file lokal dari path biasa.
|
||||
|
||||
## Input / output
|
||||
|
||||
- `output: "json"` (default) mencoba mengurai JSON dan mengekstrak teks + id sesi.
|
||||
- Untuk output JSON Gemini CLI, OpenClaw membaca teks balasan dari `response` dan
|
||||
penggunaan dari `stats` saat `usage` tidak ada atau kosong.
|
||||
- `output: "jsonl"` mengurai stream JSONL (misalnya Codex CLI `--json`) dan mengekstrak pesan agen akhir plus pengenal sesi jika ada.
|
||||
usage dari `stats` saat `usage` tidak ada atau kosong.
|
||||
- `output: "jsonl"` mengurai stream JSONL (misalnya Codex CLI `--json`) dan mengekstrak pesan agent akhir beserta pengidentifikasi sesi
|
||||
saat ada.
|
||||
- `output: "text"` memperlakukan stdout sebagai respons akhir.
|
||||
|
||||
Mode input:
|
||||
|
||||
- `input: "arg"` (default) meneruskan prompt sebagai argumen CLI terakhir.
|
||||
- `input: "arg"` (default) meneruskan prompt sebagai arg CLI terakhir.
|
||||
- `input: "stdin"` mengirim prompt melalui stdin.
|
||||
- Jika prompt sangat panjang dan `maxPromptArgChars` disetel, stdin digunakan.
|
||||
- Jika prompt sangat panjang dan `maxPromptArgChars` diatur, stdin digunakan.
|
||||
|
||||
## Default (dimiliki plugin)
|
||||
## Default (milik plugin)
|
||||
|
||||
Plugin OpenAI bawaan juga mendaftarkan default untuk `codex-cli`:
|
||||
|
||||
@ -260,28 +272,28 @@ Plugin Google bawaan juga mendaftarkan default untuk `google-gemini-cli`:
|
||||
- `sessionMode: "existing"`
|
||||
- `sessionIdFields: ["session_id", "sessionId"]`
|
||||
|
||||
Prasyarat: Gemini CLI lokal harus terinstal dan tersedia sebagai
|
||||
Prasyarat: Gemini CLI lokal harus terpasang dan tersedia sebagai
|
||||
`gemini` di `PATH` (`brew install gemini-cli` atau
|
||||
`npm install -g @google/gemini-cli`).
|
||||
|
||||
Catatan JSON Gemini CLI:
|
||||
|
||||
- Teks balasan dibaca dari field JSON `response`.
|
||||
- Penggunaan fallback ke `stats` saat `usage` tidak ada atau kosong.
|
||||
- Usage menggunakan fallback ke `stats` saat `usage` tidak ada atau kosong.
|
||||
- `stats.cached` dinormalisasi menjadi OpenClaw `cacheRead`.
|
||||
- Jika `stats.input` tidak ada, OpenClaw menurunkan token input dari
|
||||
`stats.input_tokens - stats.cached`.
|
||||
|
||||
Lakukan override hanya jika diperlukan (umumnya: path `command` absolut).
|
||||
Override hanya jika diperlukan (umum: path `command` absolut).
|
||||
|
||||
## Default yang dimiliki plugin
|
||||
## Default milik plugin
|
||||
|
||||
Default backend CLI sekarang menjadi bagian dari surface plugin:
|
||||
Default backend CLI sekarang menjadi bagian dari permukaan plugin:
|
||||
|
||||
- Plugin mendaftarkannya dengan `api.registerCliBackend(...)`.
|
||||
- Backend `id` menjadi prefiks provider dalam ref model.
|
||||
- Config pengguna di `agents.defaults.cliBackends.<id>` tetap menimpa default plugin.
|
||||
- Pembersihan config khusus backend tetap dimiliki plugin melalui hook
|
||||
- `id` backend menjadi prefiks provider dalam ref model.
|
||||
- Konfigurasi pengguna di `agents.defaults.cliBackends.<id>` tetap menimpa default plugin.
|
||||
- Pembersihan konfigurasi khusus backend tetap dimiliki plugin melalui hook
|
||||
`normalizeConfig` opsional.
|
||||
|
||||
Plugin yang memerlukan shim kompatibilitas prompt/pesan kecil dapat mendeklarasikan
|
||||
@ -302,52 +314,52 @@ api.registerTextTransforms({
|
||||
});
|
||||
```
|
||||
|
||||
`input` menulis ulang system prompt dan prompt pengguna yang diteruskan ke CLI. `output`
|
||||
menulis ulang delta asisten yang di-stream dan teks akhir yang telah diurai sebelum OpenClaw menangani
|
||||
penanda kontrolnya sendiri dan pengiriman channel.
|
||||
`input` menulis ulang system prompt dan user prompt yang diteruskan ke CLI. `output`
|
||||
menulis ulang delta assistant yang di-streaming dan teks akhir yang telah diurai sebelum OpenClaw menangani
|
||||
marker kontrolnya sendiri dan pengiriman channel.
|
||||
|
||||
Untuk CLI yang memancarkan JSONL yang kompatibel dengan stream-json Claude Code, setel
|
||||
`jsonlDialect: "claude-stream-json"` pada config backend tersebut.
|
||||
Untuk CLI yang mengeluarkan JSONL kompatibel stream-json Claude Code, set
|
||||
`jsonlDialect: "claude-stream-json"` pada konfigurasi backend tersebut.
|
||||
|
||||
## Overlay bundle MCP
|
||||
## Overlay MCP bundel
|
||||
|
||||
Backend CLI **tidak** menerima pemanggilan alat OpenClaw secara langsung, tetapi sebuah backend dapat
|
||||
ikut serta dalam overlay config MCP yang dihasilkan dengan `bundleMcp: true`.
|
||||
Backend CLI **tidak** menerima panggilan alat OpenClaw secara langsung, tetapi sebuah backend dapat
|
||||
ikut serta dalam overlay konfigurasi MCP yang dihasilkan dengan `bundleMcp: true`.
|
||||
|
||||
Perilaku bawaan saat ini:
|
||||
|
||||
- `claude-cli`: file config MCP ketat yang dihasilkan
|
||||
- `codex-cli`: override config inline untuk `mcp_servers`
|
||||
- `claude-cli`: file konfigurasi MCP ketat yang dihasilkan
|
||||
- `codex-cli`: override konfigurasi inline untuk `mcp_servers`
|
||||
- `google-gemini-cli`: file pengaturan sistem Gemini yang dihasilkan
|
||||
|
||||
Saat bundle MCP diaktifkan, OpenClaw:
|
||||
|
||||
- meluncurkan server MCP HTTP loopback yang mengekspos alat gateway ke proses CLI
|
||||
- mengautentikasi bridge dengan token per-sesi (`OPENCLAW_MCP_TOKEN`)
|
||||
- membatasi akses alat ke konteks sesi, akun, dan channel saat ini
|
||||
- memunculkan server MCP HTTP loopback yang mengekspos alat gateway ke proses CLI
|
||||
- mengautentikasi bridge dengan token per sesi (`OPENCLAW_MCP_TOKEN`)
|
||||
- membatasi akses alat ke sesi, akun, dan konteks channel saat ini
|
||||
- memuat server bundle-MCP yang diaktifkan untuk workspace saat ini
|
||||
- menggabungkannya dengan bentuk config/pengaturan MCP backend yang sudah ada
|
||||
- menulis ulang config peluncuran menggunakan mode integrasi milik backend dari extension pemilik
|
||||
- menggabungkannya dengan bentuk konfigurasi/pengaturan MCP backend yang sudah ada
|
||||
- menulis ulang konfigurasi peluncuran menggunakan mode integrasi milik backend dari extension pemiliknya
|
||||
|
||||
Jika tidak ada server MCP yang diaktifkan, OpenClaw tetap menginjeksi config ketat saat sebuah
|
||||
backend ikut serta dalam bundle MCP agar run latar belakang tetap terisolasi.
|
||||
Jika tidak ada server MCP yang diaktifkan, OpenClaw tetap menyuntikkan konfigurasi ketat saat sebuah
|
||||
backend ikut serta dalam bundle MCP agar eksekusi latar belakang tetap terisolasi.
|
||||
|
||||
## Batasan
|
||||
## Keterbatasan
|
||||
|
||||
- **Tidak ada pemanggilan alat OpenClaw langsung.** OpenClaw tidak menginjeksi pemanggilan alat ke
|
||||
- **Tidak ada panggilan alat OpenClaw langsung.** OpenClaw tidak menyuntikkan panggilan alat ke
|
||||
protokol backend CLI. Backend hanya melihat alat gateway saat mereka ikut serta dalam
|
||||
`bundleMcp: true`.
|
||||
- **Streaming bersifat khusus backend.** Beberapa backend men-stream JSONL; yang lain membuffer
|
||||
sampai keluar.
|
||||
- **Output terstruktur** bergantung pada format JSON CLI.
|
||||
- **Sesi Codex CLI** melanjutkan melalui output teks (tanpa JSONL), yang kurang
|
||||
terstruktur dibanding run awal `--json`. Sesi OpenClaw tetap berfungsi
|
||||
- **Streaming bersifat spesifik per backend.** Beberapa backend melakukan streaming JSONL; yang lain menahan buffer
|
||||
hingga proses selesai.
|
||||
- **Output terstruktur** bergantung pada format JSON milik CLI.
|
||||
- **Sesi Codex CLI** dilanjutkan melalui output teks (tanpa JSONL), yang kurang
|
||||
terstruktur dibandingkan eksekusi awal `--json`. Sesi OpenClaw tetap berfungsi
|
||||
normal.
|
||||
|
||||
## Pemecahan masalah
|
||||
|
||||
- **CLI tidak ditemukan**: setel `command` ke path lengkap.
|
||||
- **CLI tidak ditemukan**: set `command` ke path lengkap.
|
||||
- **Nama model salah**: gunakan `modelAliases` untuk memetakan `provider/model` → model CLI.
|
||||
- **Tidak ada kontinuitas sesi**: pastikan `sessionArg` disetel dan `sessionMode` bukan
|
||||
- **Tidak ada kontinuitas sesi**: pastikan `sessionArg` diatur dan `sessionMode` bukan
|
||||
`none` (Codex CLI saat ini tidak dapat melanjutkan dengan output JSON).
|
||||
- **Gambar diabaikan**: setel `imageArg` (dan verifikasi bahwa CLI mendukung path file).
|
||||
- **Gambar diabaikan**: set `imageArg` (dan pastikan CLI mendukung path file).
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user