diff --git a/docs/id/ci.md b/docs/id/ci.md index a7badabe3..e78d63ded 100644 --- a/docs/id/ci.md +++ b/docs/id/ci.md @@ -1,71 +1,71 @@ --- read_when: - - Anda perlu memahami mengapa sebuah job CI berjalan atau tidak - - Anda sedang menelusuri masalah pada pemeriksaan GitHub Actions yang gagal - - Anda sedang mengoordinasikan eksekusi validasi rilis atau eksekusi ulangnya + - Anda perlu memahami mengapa pekerjaan CI berjalan atau tidak berjalan + - Anda sedang men-debug pemeriksaan GitHub Actions yang gagal + - Anda sedang mengoordinasikan proses validasi rilis atau pengulangannya - Anda sedang mengubah pengiriman ClawSweeper atau penerusan aktivitas GitHub -summary: Graf pekerjaan CI, gerbang cakupan, payung rilis, dan padanan perintah lokal -title: Alur CI +summary: Graf tugas CI, gerbang cakupan, payung rilis, dan padanan perintah lokal +title: Pipeline CI x-i18n: - generated_at: "2026-05-02T22:17:55Z" + generated_at: "2026-05-02T23:39:24Z" model: gpt-5.5 provider: openai - source_hash: a8033b928b26adfa340200ea69fd63d339a6e65c21659b8119a68b23b8b16016 + source_hash: 321fe0a061044f75b8e1d03b4d3e76d4f8dd2dae0ebc58831887fc20af953cf1 source_path: ci.md workflow: 16 --- -OpenClaw CI berjalan pada setiap push ke `main` dan setiap pull request. Job `preflight` mengklasifikasikan diff dan menonaktifkan lane yang mahal ketika hanya area yang tidak terkait yang berubah. Run `workflow_dispatch` manual sengaja melewati scoping cerdas dan menyebar ke seluruh grafik untuk kandidat rilis dan validasi luas. Lane Android tetap opsional melalui `include_android`. Cakupan Plugin khusus rilis berada di workflow terpisah [`Prarilis Plugin`](#plugin-prerelease) dan hanya berjalan dari [`Validasi Rilis Penuh`](#full-release-validation) atau dispatch manual eksplisit. +OpenClaw CI berjalan pada setiap push ke `main` dan setiap pull request. Job `preflight` mengklasifikasikan diff dan mematikan lane yang mahal ketika hanya area yang tidak terkait yang berubah. Run `workflow_dispatch` manual secara sengaja melewati scoping cerdas dan menyebarkan seluruh graph untuk kandidat rilis dan validasi luas. Lane Android tetap opt-in melalui `include_android`. Cakupan Plugin khusus rilis berada di workflow [`Plugin Prerelease`](#plugin-prerelease) terpisah dan hanya berjalan dari [`Full Release Validation`](#full-release-validation) atau dispatch manual eksplisit. -## Ringkasan pipeline +## Ikhtisar pipeline -| Job | Tujuan | Kapan berjalan | -| -------------------------------- | ------------------------------------------------------------------------------------------------------------------- | -------------------------------------- | -| `preflight` | Mendeteksi perubahan khusus docs, scope yang berubah, ekstensi yang berubah, dan membangun manifest CI | Selalu pada push dan PR non-draf | -| `security-scm-fast` | Deteksi kunci privat dan audit workflow melalui `zizmor` | Selalu pada push dan PR non-draf | -| `security-dependency-audit` | Audit lockfile produksi bebas dependensi terhadap advisory npm | Selalu pada push dan PR non-draf | -| `security-fast` | Agregat wajib untuk job keamanan cepat | Selalu pada push dan PR non-draf | -| `check-dependencies` | Pass khusus dependensi Knip produksi ditambah penjaga allowlist file tidak terpakai | Perubahan relevan Node | -| `build-artifacts` | Membangun `dist/`, Control UI, pemeriksaan artefak build, dan artefak downstream yang dapat digunakan ulang | Perubahan relevan Node | -| `checks-fast-core` | Lane kebenaran Linux cepat seperti pemeriksaan bundled/kontrak-plugin/protokol | Perubahan relevan Node | -| `checks-fast-contracts-channels` | Pemeriksaan kontrak kanal yang di-shard dengan hasil pemeriksaan agregat yang stabil | Perubahan relevan Node | -| `checks-node-core-test` | Shard pengujian Node inti, mengecualikan lane kanal, bundled, kontrak, dan ekstensi | Perubahan relevan Node | -| `check` | Ekuivalen gate lokal utama yang di-shard: tipe prod, lint, guard, tipe pengujian, dan smoke ketat | Perubahan relevan Node | -| `check-additional` | Arsitektur, batas, drift snapshot prompt, guard surface ekstensi, batas paket, dan shard gateway-watch | Perubahan relevan Node | -| `build-smoke` | Pengujian smoke CLI yang sudah dibuild dan smoke memori startup | Perubahan relevan Node | -| `checks` | Verifier untuk pengujian kanal artefak build | Perubahan relevan Node | -| `checks-node-compat-node22` | Lane build dan smoke kompatibilitas Node 22 | Dispatch CI manual untuk rilis | -| `check-docs` | Pemformatan docs, lint, dan pemeriksaan tautan rusak | Docs berubah | -| `skills-python` | Ruff + pytest untuk skills yang didukung Python | Perubahan relevan skill Python | -| `checks-windows` | Pengujian proses/path khusus Windows ditambah regresi specifier impor runtime bersama | Perubahan relevan Windows | -| `macos-node` | Lane pengujian TypeScript macOS menggunakan artefak build bersama | Perubahan relevan macOS | -| `macos-swift` | Swift lint, build, dan pengujian untuk aplikasi macOS | Perubahan relevan macOS | -| `android` | Pengujian unit Android untuk kedua flavor ditambah satu build APK debug | Perubahan relevan Android | -| `test-performance-agent` | Optimisasi pengujian lambat Codex harian setelah aktivitas tepercaya | CI utama sukses atau dispatch manual | -| `openclaw-performance` | Laporan performa runtime Kova harian/sesuai permintaan dengan lane mock-provider, deep-profile, dan live GPT 5.4 | Terjadwal dan dispatch manual | +| Job | Tujuan | Kapan berjalan | +| -------------------------------- | ------------------------------------------------------------------------------------------------------------------- | ---------------------------------- | +| `preflight` | Mendeteksi perubahan khusus docs, scope yang berubah, 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 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 | +| `check-dependencies` | Pass khusus dependensi Knip produksi plus guard allowlist file yang tidak digunakan | Perubahan relevan Node | +| `build-artifacts` | Membangun `dist/`, Control UI, pemeriksaan artefak build, dan artefak downstream yang dapat digunakan ulang | Perubahan relevan Node | +| `checks-fast-core` | Lane kebenaran Linux cepat seperti pemeriksaan bundled/kontrak-Plugin/protokol | Perubahan relevan Node | +| `checks-fast-contracts-channels` | Pemeriksaan kontrak channel yang di-shard dengan hasil pemeriksaan agregat yang stabil | Perubahan relevan Node | +| `checks-node-core-test` | Shard pengujian Node inti, mengecualikan lane channel, bundled, kontrak, dan extension | Perubahan relevan Node | +| `check` | Ekuivalen gate lokal utama yang di-shard: tipe prod, lint, guard, tipe pengujian, dan smoke ketat | Perubahan relevan Node | +| `check-additional` | Arsitektur, boundary, drift snapshot prompt, guard permukaan extension, package-boundary, dan shard gateway-watch | Perubahan relevan Node | +| `build-smoke` | Pengujian smoke CLI hasil build dan smoke memori startup | Perubahan relevan Node | +| `checks` | Verifier untuk pengujian channel artefak hasil build | Perubahan relevan Node | +| `checks-node-compat-node22` | Lane build dan smoke kompatibilitas Node 22 | Dispatch CI manual untuk rilis | +| `check-docs` | Format docs, lint, dan pemeriksaan tautan rusak | Docs berubah | +| `skills-python` | Ruff + pytest untuk skills yang didukung Python | Perubahan relevan skill Python | +| `checks-windows` | Pengujian proses/path khusus Windows plus regresi specifier impor runtime bersama | Perubahan relevan Windows | +| `macos-node` | Lane pengujian TypeScript macOS menggunakan artefak hasil build bersama | Perubahan relevan macOS | +| `macos-swift` | Lint, build, dan pengujian Swift untuk aplikasi macOS | Perubahan relevan macOS | +| `android` | Pengujian unit Android untuk kedua flavor plus satu build APK debug | Perubahan relevan Android | +| `test-performance-agent` | Optimisasi pengujian lambat Codex harian setelah aktivitas tepercaya | CI utama berhasil atau dispatch manual | +| `openclaw-performance` | Laporan performa runtime Kova harian/on-demand dengan lane mock-provider, deep-profile, dan live GPT 5.4 | Terjadwal dan dispatch manual | ## Urutan fail-fast -1. `preflight` memutuskan lane mana yang ada sama sekali. Logika `docs-scope` dan `changed-scope` adalah langkah di dalam job ini, bukan job mandiri. +1. `preflight` menentukan lane mana yang ada sama sekali. Logika `docs-scope` dan `changed-scope` adalah langkah di dalam job ini, bukan job mandiri. 2. `security-scm-fast`, `security-dependency-audit`, `security-fast`, `check`, `check-additional`, `check-docs`, dan `skills-python` gagal cepat tanpa menunggu job artefak dan matriks platform yang lebih berat. -3. `build-artifacts` tumpang tindih dengan lane Linux cepat sehingga konsumen downstream dapat mulai segera setelah build bersama siap. +3. `build-artifacts` berjalan tumpang tindih dengan lane Linux cepat sehingga konsumen downstream dapat mulai segera setelah build bersama siap. 4. Lane platform dan runtime yang lebih berat menyebar setelah itu: `checks-fast-core`, `checks-fast-contracts-channels`, `checks-node-core-test`, `checks`, `checks-windows`, `macos-node`, `macos-swift`, dan `android`. -GitHub dapat menandai job yang digantikan sebagai `cancelled` ketika push yang lebih baru masuk ke PR atau ref `main` yang sama. Perlakukan itu sebagai noise CI kecuali run terbaru untuk ref yang sama juga gagal. Pemeriksaan shard agregat menggunakan `!cancelled() && always()` sehingga tetap melaporkan kegagalan shard normal tetapi tidak mengantre setelah seluruh workflow sudah digantikan. Kunci konkurensi CI otomatis diberi versi (`CI-v7-*`) sehingga zombie sisi GitHub di grup antrean lama tidak dapat memblokir run main yang lebih baru tanpa batas. Run suite penuh manual menggunakan `CI-manual-v1-*` dan tidak membatalkan run yang sedang berjalan. +GitHub dapat menandai job yang tergantikan sebagai `cancelled` ketika push yang lebih baru masuk ke PR yang sama atau ref `main`. Perlakukan itu sebagai noise CI kecuali run terbaru untuk ref yang sama juga gagal. Pemeriksaan shard agregat menggunakan `!cancelled() && always()` sehingga tetap melaporkan kegagalan shard normal tetapi tidak antre setelah seluruh workflow sudah tergantikan. Kunci konkurensi CI otomatis diberi versi (`CI-v7-*`) sehingga zombie sisi GitHub di grup antrean lama tidak dapat memblokir run main yang lebih baru tanpa batas. Run full-suite manual menggunakan `CI-manual-v1-*` dan tidak membatalkan run yang sedang berlangsung. ## Scope dan routing -Logika scope berada di `scripts/ci-changed-scope.mjs` dan dicakup oleh pengujian unit di `src/scripts/ci-changed-scope.test.ts`. Dispatch manual melewati deteksi changed-scope dan membuat manifest preflight bertindak seolah-olah setiap area berscope berubah. +Logika scope berada di `scripts/ci-changed-scope.mjs` dan dicakup oleh pengujian unit di `src/scripts/ci-changed-scope.test.ts`. Dispatch manual melewati deteksi changed-scope dan membuat manifes preflight bertindak seolah setiap area berscope berubah. -- **Edit workflow CI** memvalidasi grafik CI Node ditambah linting workflow, tetapi tidak memaksa build native Windows, Android, atau macOS dengan sendirinya; lane platform tersebut tetap berscope ke perubahan sumber platform. -- **Edit khusus routing CI, edit fixture pengujian inti murah tertentu, dan edit helper/test-routing kontrak Plugin yang sempit** menggunakan jalur manifest cepat khusus Node: `preflight`, keamanan, dan satu tugas `checks-fast-core`. Jalur itu melewati artefak build, kompatibilitas Node 22, kontrak kanal, shard inti penuh, shard Plugin bundled, dan matriks guard tambahan ketika perubahan terbatas pada surface routing atau helper yang diuji langsung oleh tugas cepat tersebut. -- **Pemeriksaan Node Windows** berscope ke wrapper proses/path khusus Windows, helper runner npm/pnpm/UI, konfigurasi manajer paket, dan surface workflow CI yang menjalankan lane tersebut; perubahan sumber, Plugin, install-smoke, dan khusus pengujian yang tidak terkait tetap berada di lane Linux Node. +- **Edit workflow CI** memvalidasi graph CI Node plus linting workflow, tetapi tidak memaksa build native Windows, Android, atau macOS dengan sendirinya; lane platform tersebut tetap dibatasi ke perubahan source platform. +- **Edit khusus routing CI, edit fixture pengujian inti murah tertentu, dan edit helper/routing pengujian kontrak Plugin yang sempit** menggunakan jalur manifes cepat khusus Node: `preflight`, keamanan, dan satu tugas `checks-fast-core`. Jalur itu melewati artefak build, kompatibilitas Node 22, kontrak channel, shard inti penuh, shard bundled-Plugin, dan matriks guard tambahan ketika perubahan terbatas pada permukaan routing atau helper yang langsung diuji tugas cepat tersebut. +- **Pemeriksaan Node Windows** dibatasi ke 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 pengujian yang tidak terkait tetap berada di lane Node Linux. -Keluarga pengujian Node paling lambat dipecah atau diseimbangkan agar setiap job tetap kecil tanpa memesan runner secara berlebihan: kontrak kanal berjalan sebagai tiga shard berbobot, lane unit inti kecil dipasangkan, auto-reply berjalan sebagai empat worker seimbang (dengan subtree reply dipecah menjadi shard agent-runner, dispatch, dan commands/state-routing), dan konfigurasi agentic Gateway/Plugin disebar di seluruh job Node agentic khusus sumber yang sudah ada alih-alih menunggu artefak build. Pengujian browser, QA, media, dan Plugin lain-lain yang luas menggunakan konfigurasi Vitest khususnya sendiri, bukan catch-all Plugin bersama. Shard include-pattern mencatat entri waktu menggunakan nama shard CI, sehingga `.artifacts/vitest-shard-timings.json` dapat membedakan seluruh konfigurasi dari shard yang difilter. `check-additional` menjaga pekerjaan kompilasi/canary batas paket tetap bersama dan memisahkan arsitektur topologi runtime dari cakupan gateway watch; shard guard batas menjalankan guard independen kecilnya secara bersamaan di dalam satu job, termasuk `pnpm prompt:snapshots:check` sehingga drift prompt jalur lancar Codex dipasangkan ke PR yang menyebabkannya. Gateway watch, pengujian kanal, dan shard batas dukungan inti berjalan secara bersamaan di dalam `build-artifacts` setelah `dist/` dan `dist-runtime/` sudah dibuild. +Keluarga pengujian Node paling lambat dipecah atau diseimbangkan agar setiap job tetap kecil tanpa memesan runner berlebihan: kontrak channel berjalan sebagai tiga shard berbobot, lane unit inti kecil dipasangkan, auto-reply berjalan sebagai empat worker seimbang (dengan subtree reply dipecah menjadi shard agent-runner, dispatch, dan commands/state-routing), dan konfigurasi agentic Gateway/Plugin disebar ke job Node agentic khusus source yang sudah ada alih-alih menunggu artefak hasil build. Pengujian browser luas, QA, media, dan Plugin lain-lain menggunakan konfigurasi Vitest khususnya, bukan catch-all Plugin bersama. Shard include-pattern mencatat entri timing menggunakan nama shard CI, sehingga `.artifacts/vitest-shard-timings.json` dapat membedakan seluruh konfigurasi dari shard yang difilter. `check-additional` menjaga pekerjaan compile/canary package-boundary tetap bersama dan memisahkan arsitektur topologi runtime dari cakupan gateway watch; shard guard boundary menjalankan guard independen kecilnya secara konkuren di dalam satu job, termasuk `pnpm prompt:snapshots:check` sehingga drift prompt happy-path runtime Codex dipakukan ke PR yang menyebabkannya. Gateway watch, pengujian channel, dan shard support-boundary inti berjalan konkuren di dalam `build-artifacts` setelah `dist/` dan `dist-runtime/` sudah dibangun. -Android CI menjalankan `testPlayDebugUnitTest` dan `testThirdPartyDebugUnitTest`, lalu membuild APK debug Play. Flavor pihak ketiga tidak memiliki source set atau manifest terpisah; lane pengujian unitnya tetap mengompilasi flavor dengan flag BuildConfig SMS/call-log, sambil menghindari job packaging APK debug duplikat pada setiap push yang relevan dengan Android. +CI Android menjalankan `testPlayDebugUnitTest` dan `testThirdPartyDebugUnitTest`, lalu membangun APK debug Play. Flavor pihak ketiga tidak memiliki source set atau manifes terpisah; lane pengujian unitnya tetap mengompilasi flavor dengan flag BuildConfig SMS/call-log, sambil menghindari job packaging APK debug duplikat pada setiap push relevan Android. -Shard `check-dependencies` menjalankan `pnpm deadcode:dependencies` (pass khusus dependensi Knip produksi yang dipin ke versi Knip terbaru, dengan usia rilis minimum pnpm dinonaktifkan untuk instalasi `dlx`) dan `pnpm deadcode:unused-files`, yang membandingkan temuan file tidak terpakai produksi Knip terhadap `scripts/deadcode-unused-files.allowlist.mjs`. Guard file tidak terpakai gagal ketika PR menambahkan file tidak terpakai baru yang belum ditinjau atau meninggalkan entri allowlist usang, sambil mempertahankan surface Plugin dinamis, generated, build, live-test, dan bridge paket yang disengaja yang tidak dapat diselesaikan Knip secara statis. +Shard `check-dependencies` menjalankan `pnpm deadcode:dependencies` (pass khusus dependensi Knip produksi yang dipin ke versi Knip terbaru, dengan usia rilis minimum pnpm dinonaktifkan untuk install `dlx`) dan `pnpm deadcode:unused-files`, yang membandingkan temuan file produksi yang tidak digunakan dari Knip terhadap `scripts/deadcode-unused-files.allowlist.mjs`. Guard file yang tidak digunakan gagal ketika PR menambahkan file tidak digunakan baru yang belum ditinjau atau meninggalkan entri allowlist usang, sambil mempertahankan permukaan Plugin dinamis, generated, build, live-test, dan bridge package yang disengaja yang tidak dapat diselesaikan Knip secara statis. ## Penerusan aktivitas ClawSweeper @@ -74,21 +74,21 @@ Shard `check-dependencies` menjalankan `pnpm deadcode:dependencies` (pass khusus Workflow ini memiliki empat lane: - `clawsweeper_item` untuk permintaan tinjauan issue dan pull request yang tepat; -- `clawsweeper_comment` untuk perintah ClawSweeper eksplisit dalam komentar issue; +- `clawsweeper_comment` untuk perintah ClawSweeper eksplisit di komentar issue; - `clawsweeper_commit_review` untuk permintaan tinjauan tingkat commit pada push `main`; - `github_activity` untuk aktivitas GitHub umum yang dapat diperiksa agen ClawSweeper. -Lane `github_activity` hanya meneruskan metadata yang dinormalisasi: jenis peristiwa, tindakan, aktor, repositori, nomor item, URL, judul, status, dan kutipan pendek untuk komentar atau tinjauan jika ada. Lane ini sengaja menghindari penerusan seluruh body Webhook. Workflow penerima di `openclaw/clawsweeper` adalah `.github/workflows/github-activity.yml`, yang memposting peristiwa yang dinormalisasi ke hook OpenClaw Gateway untuk agen ClawSweeper. +Lane `github_activity` hanya meneruskan metadata yang dinormalisasi: tipe event, aksi, aktor, repositori, nomor item, URL, judul, status, dan kutipan pendek untuk komentar atau tinjauan ketika ada. Lane ini sengaja menghindari penerusan body webhook penuh. Workflow penerima di `openclaw/clawsweeper` adalah `.github/workflows/github-activity.yml`, yang memposting event yang dinormalisasi ke hook OpenClaw Gateway untuk agen ClawSweeper. -Aktivitas umum adalah observasi, bukan pengiriman secara default. Agen ClawSweeper menerima target Discord di prompt-nya dan hanya boleh memposting ke `#clawsweeper` ketika peristiwa tersebut mengejutkan, dapat ditindaklanjuti, berisiko, atau berguna secara operasional. Pembukaan rutin, edit, churn bot, noise Webhook duplikat, dan lalu lintas tinjauan normal seharusnya menghasilkan `NO_REPLY`. +Aktivitas umum adalah observasi, bukan pengiriman secara default. Agen ClawSweeper menerima target Discord di prompt-nya dan sebaiknya memposting ke `#clawsweeper` hanya ketika event tersebut mengejutkan, dapat ditindaklanjuti, berisiko, atau berguna secara operasional. Pembukaan rutin, edit, churn bot, noise webhook duplikat, dan traffic tinjauan normal sebaiknya menghasilkan `NO_REPLY`. -Perlakukan judul GitHub, komentar, body, teks tinjauan, nama branch, dan pesan commit sebagai data yang tidak tepercaya di seluruh jalur ini. Semua itu adalah input untuk perangkuman dan triage, bukan instruksi untuk workflow atau runtime agen. +Perlakukan judul, komentar, body, teks tinjauan, nama branch, dan pesan commit GitHub sebagai data yang tidak tepercaya di seluruh jalur ini. Semua itu adalah input untuk peringkasan dan triage, bukan instruksi untuk workflow atau runtime agen. ## Dispatch manual -Dispatch CI manual menjalankan grafik job yang sama seperti CI normal, tetapi memaksa setiap lane berscope non-Android aktif: shard Linux Node, shard Plugin terbundel, kontrak channel, kompatibilitas Node 22, `check`, `check-additional`, smoke build, pemeriksaan docs, Python skills, Windows, macOS, dan i18n Control UI. Dispatch CI manual mandiri hanya menjalankan Android dengan `include_android=true`; payung rilis penuh mengaktifkan Android dengan meneruskan `include_android=true`. Pemeriksaan statis prarilis Plugin, shard khusus rilis `agentic-plugins`, sweep batch ekstensi penuh, dan lane Docker prarilis Plugin dikecualikan dari CI. Suite prarilis Docker hanya berjalan ketika `Full Release Validation` mendispatch workflow `Plugin Prerelease` terpisah dengan gate validasi rilis diaktifkan. +Dispatch CI manual menjalankan grafik pekerjaan yang sama seperti CI normal, tetapi memaksa setiap lane berscope non-Android aktif: shard Linux Node, shard plugin bawaan, kontrak channel, kompatibilitas Node 22, `check`, `check-additional`, build smoke, pemeriksaan docs, Python skills, Windows, macOS, dan i18n Control UI. Dispatch CI manual mandiri menjalankan Android saja dengan `include_android=true`; payung rilis penuh mengaktifkan Android dengan meneruskan `include_android=true`. Pemeriksaan statis prarilis plugin, shard khusus rilis `agentic-plugins`, sweep batch ekstensi penuh, dan lane Docker prarilis plugin dikecualikan dari CI. Suite prarilis Docker hanya berjalan ketika `Full Release Validation` men-dispatch workflow `Plugin Prerelease` terpisah dengan gate validasi rilis diaktifkan. -Run manual menggunakan grup konkurensi unik sehingga suite penuh kandidat rilis tidak dibatalkan oleh run push atau PR lain pada ref yang sama. Input opsional `target_ref` memungkinkan pemanggil tepercaya menjalankan grafik itu terhadap branch, tag, atau SHA commit penuh sambil menggunakan file workflow dari ref dispatch yang dipilih. +Run manual menggunakan grup konkurensi unik sehingga suite penuh kandidat rilis tidak dibatalkan oleh run push atau PR lain pada ref yang sama. Input opsional `target_ref` memungkinkan pemanggil tepercaya menjalankan grafik tersebut terhadap branch, tag, atau SHA commit penuh sambil menggunakan file workflow dari ref dispatch yang dipilih. ```bash gh workflow run ci.yml --ref release/YYYY.M.D @@ -98,38 +98,38 @@ gh workflow run full-release-validation.yml --ref main -f ref= ## Runner -| Runner | Job | +| Runner | Pekerjaan | | -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `ubuntu-24.04` | `preflight`, job keamanan cepat dan agregat (`security-scm-fast`, `security-dependency-audit`, `security-fast`), pemeriksaan protokol/kontrak/terbundel cepat, pemeriksaan kontrak channel tershard, shard `check` kecuali lint, shard dan agregat `check-additional`, verifier agregat pengujian Node, pemeriksaan docs, Python skills, workflow-sanity, labeler, auto-response; preflight install-smoke juga menggunakan Ubuntu yang dihosting GitHub agar matriks Blacksmith dapat masuk antrean lebih awal | -| `blacksmith-4vcpu-ubuntu-2404` | `CodeQL Critical Quality`, shard ekstensi berbobot lebih ringan, `checks-fast-core`, `checks-node-compat-node22`, `check-prod-types`, dan `check-test-types` | -| `blacksmith-8vcpu-ubuntu-2404` | `build-artifacts`, build-smoke, shard pengujian Linux Node, shard pengujian Plugin terbundel, `android` | -| `blacksmith-16vcpu-ubuntu-2404` | `check-lint` (cukup sensitif CPU sehingga 8 vCPU lebih mahal daripada penghematan yang diberikannya); build Docker install-smoke (biaya waktu antrean 32-vCPU lebih besar daripada penghematan yang diberikannya) | +| `ubuntu-24.04` | `preflight`, pekerjaan keamanan cepat dan agregat (`security-scm-fast`, `security-dependency-audit`, `security-fast`), pemeriksaan protokol/kontrak/bawaan cepat, pemeriksaan kontrak channel bershard, shard `check` kecuali lint, shard dan agregat `check-additional`, pemverifikasi agregat pengujian Node, pemeriksaan docs, Python skills, workflow-sanity, labeler, auto-response; preflight install-smoke juga menggunakan Ubuntu yang di-host GitHub agar matriks Blacksmith dapat antre lebih awal | +| `blacksmith-4vcpu-ubuntu-2404` | `CodeQL Critical Quality`, shard ekstensi berbobot lebih rendah, `checks-fast-core`, `checks-node-compat-node22`, `check-prod-types`, dan `check-test-types` | +| `blacksmith-8vcpu-ubuntu-2404` | `build-artifacts`, build-smoke, shard pengujian Linux Node, shard pengujian plugin bawaan, `android` | +| `blacksmith-16vcpu-ubuntu-2404` | `check-lint` (cukup sensitif terhadap CPU sehingga 8 vCPU biayanya lebih besar daripada penghematannya); build Docker install-smoke (biaya waktu antre 32-vCPU lebih besar daripada penghematannya) | | `blacksmith-16vcpu-windows-2025` | `checks-windows` | | `blacksmith-6vcpu-macos-latest` | `macos-node` pada `openclaw/openclaw`; fork fallback ke `macos-latest` | | `blacksmith-12vcpu-macos-latest` | `macos-swift` pada `openclaw/openclaw`; fork fallback ke `macos-latest` | -## Padanan Lokal +## Padanan lokal ```bash -pnpm changed:lanes # inspect the local changed-lane classifier for origin/main...HEAD -pnpm check:changed # smart local check gate: changed typecheck/lint/guards by boundary lane -pnpm check # fast local gate: prod tsgo + sharded lint + parallel fast guards +pnpm changed:lanes # periksa pengklasifikasi changed-lane lokal untuk origin/main...HEAD +pnpm check:changed # gate pemeriksaan lokal cerdas: typecheck/lint/guard yang berubah berdasarkan lane batas +pnpm check # gate lokal cepat: prod tsgo + lint bershard + guard cepat paralel pnpm check:test-types -pnpm check:timed # same gate with per-stage timings +pnpm check:timed # gate yang sama dengan waktu per tahap pnpm build:strict-smoke pnpm check:architecture pnpm test:gateway:watch-regression -pnpm test # vitest tests -pnpm test:changed # cheap smart changed Vitest targets +pnpm test # pengujian vitest +pnpm test:changed # target Vitest changed cerdas yang murah pnpm test:channels pnpm test:contracts:channels -pnpm check:docs # docs format + lint + broken links -pnpm build # build dist when CI artifact/build-smoke lanes matter -pnpm ci:timings # summarize the latest origin/main push CI run -pnpm ci:timings:recent # compare recent successful main CI runs -node scripts/ci-run-timings.mjs # summarize wall time, queue time, and slowest jobs -node scripts/ci-run-timings.mjs --latest-main # ignore issue/comment noise and choose origin/main push CI -node scripts/ci-run-timings.mjs --recent 10 # compare recent successful main CI runs +pnpm check:docs # format docs + lint + tautan rusak +pnpm build # build dist saat lane artefak CI/build-smoke penting +pnpm ci:timings # ringkas run CI push origin/main terbaru +pnpm ci:timings:recent # bandingkan run CI main berhasil terbaru +node scripts/ci-run-timings.mjs # ringkas waktu wall, waktu antre, dan pekerjaan paling lambat +node scripts/ci-run-timings.mjs --latest-main # abaikan noise issue/comment dan pilih CI push origin/main +node scripts/ci-run-timings.mjs --recent 10 # bandingkan run CI main berhasil terbaru pnpm test:perf:groups --full-suite --allow-failures --output .artifacts/test-perf/baseline-before.json pnpm test:perf:groups:compare .artifacts/test-perf/baseline-before.json .artifacts/test-perf/after-agent.json pnpm perf:kova:summary --report .artifacts/kova/reports/mock-provider/report.json --output .artifacts/kova/summary.md @@ -137,7 +137,7 @@ pnpm perf:kova:summary --report .artifacts/kova/reports/mock-provider/report.jso ## Performa OpenClaw -`OpenClaw Performance` adalah workflow performa produk/runtime. Workflow ini berjalan harian di `main` dan dapat didispatch secara manual: +`OpenClaw Performance` adalah workflow performa produk/runtime. Workflow ini berjalan harian pada `main` dan dapat di-dispatch secara manual: ```bash gh workflow run openclaw-performance.yml --ref main -f profile=diagnostic -f repeat=3 @@ -146,28 +146,21 @@ gh workflow run openclaw-performance.yml --ref main -f profile=smoke -f repeat=1 Workflow menginstal OCM dari rilis yang dipin dan Kova dari input `kova_ref` yang dipin, lalu menjalankan tiga lane: -- `mock-provider`: skenario diagnostik Kova terhadap runtime build lokal dengan autentikasi kompatibel OpenAI palsu yang deterministik. +- `mock-provider`: skenario diagnostik Kova terhadap runtime build lokal dengan auth kompatibel OpenAI palsu yang deterministik. - `mock-deep-profile`: profiling CPU/heap/trace untuk hotspot startup, gateway, dan agent-turn. -- `live-gpt54`: turn agen OpenAI `openai/gpt-5.4` nyata, dilewati ketika `OPENAI_API_KEY` tidak tersedia. +- `live-gpt54`: giliran agen OpenAI `openai/gpt-5.4` nyata, dilewati ketika `OPENAI_API_KEY` tidak tersedia. -Lane mock-provider juga menjalankan probe sumber native OpenClaw setelah pass Kova: timing boot gateway dan memori di seluruh kasus startup default, hook, dan 50-Plugin; loop hello `channel-chat-baseline` mock-OpenAI berulang; dan perintah startup CLI terhadap gateway yang sudah diboot. Ringkasan Markdown probe sumber berada di `source/index.md` dalam bundel laporan, dengan JSON mentah di sebelahnya. +Lane mock-provider juga menjalankan probe sumber native OpenClaw setelah pass Kova: timing boot gateway dan memori di seluruh kasus startup default, hook, dan 50-plugin; loop hello `channel-chat-baseline` mock-OpenAI berulang; dan perintah startup CLI terhadap gateway yang sudah diboot. Ringkasan Markdown probe sumber berada di `source/index.md` dalam bundle laporan, dengan JSON mentah di sebelahnya. -Setiap lane mengunggah artefak GitHub. Ketika `CLAWGRIT_REPORTS_TOKEN` dikonfigurasi, workflow juga mengcommit `report.json`, `report.md`, bundel, `index.md`, dan artefak probe sumber ke `openclaw/clawgrit-reports` di bawah `openclaw-performance//-//`. Pointer branch saat ini ditulis sebagai `openclaw-performance//latest-.json`. +Setiap lane mengunggah artefak GitHub. Ketika `CLAWGRIT_REPORTS_TOKEN` dikonfigurasi, workflow juga meng-commit `report.json`, `report.md`, bundle, `index.md`, dan artefak source-probe ke `openclaw/clawgrit-reports` di bawah `openclaw-performance//-//`. Pointer branch saat ini ditulis sebagai `openclaw-performance//latest-.json`. ## Validasi Rilis Penuh -`Full Release Validation` adalah workflow payung manual untuk "menjalankan semuanya sebelum rilis." Workflow ini menerima branch, tag, atau SHA commit penuh, mendispatch workflow `CI` manual dengan target tersebut, mendispatch `Plugin Prerelease` untuk bukti khusus rilis Plugin/paket/statis/Docker, dan mendispatch `OpenClaw Release Checks` untuk smoke install, acceptance paket, suite jalur rilis Docker, live/E2E, OpenWebUI, paritas QA Lab, Matrix, dan lane Telegram. Dengan `rerun_group=all` dan `release_profile=full`, workflow ini juga menjalankan `NPM Telegram Beta E2E` terhadap artefak `release-package-under-test` dari pemeriksaan rilis. Setelah penerbitan, teruskan `npm_telegram_package_spec` untuk menjalankan ulang lane paket Telegram yang sama terhadap paket npm yang diterbitkan. +`Full Release Validation` adalah workflow payung manual untuk "jalankan semuanya sebelum rilis." Workflow ini menerima branch, tag, atau SHA commit penuh, men-dispatch workflow `CI` manual dengan target tersebut, men-dispatch `Plugin Prerelease` untuk bukti plugin/package/static/Docker khusus rilis, dan men-dispatch `OpenClaw Release Checks` untuk install smoke, penerimaan package, suite jalur rilis Docker, live/E2E, OpenWebUI, paritas QA Lab, Matrix, dan lane Telegram. Dengan `rerun_group=all` dan `release_profile=full`, workflow ini juga menjalankan `NPM Telegram Beta E2E` terhadap artefak `release-package-under-test` dari pemeriksaan rilis. Setelah publikasi, teruskan `npm_telegram_package_spec` untuk menjalankan ulang lane package Telegram yang sama terhadap package npm yang sudah dipublikasikan. -Lihat [Validasi rilis penuh](/id/reference/full-release-validation) untuk -matriks tahap, nama job workflow persis, perbedaan profil, artefak, dan -handle rerun terfokus. +Lihat [Validasi rilis penuh](/id/reference/full-release-validation) untuk matriks tahap, nama pekerjaan workflow yang tepat, perbedaan profil, artefak, dan handle rerun terfokus. -`OpenClaw Release Publish` adalah workflow rilis mutating manual. Dispatch dari -`release/YYYY.M.D` atau `main` setelah tag rilis ada dan setelah preflight npm -OpenClaw berhasil. Workflow ini memverifikasi `pnpm plugins:sync:check`, -mendispatch `Plugin NPM Release` untuk semua paket Plugin yang dapat dipublikasikan, mendispatch -`Plugin ClawHub Release` untuk SHA rilis yang sama, dan baru kemudian mendispatch -`OpenClaw NPM Release` dengan `preflight_run_id` yang disimpan. +`OpenClaw Release Publish` adalah workflow rilis mutasi manual. Dispatch dari `release/YYYY.M.D` atau `main` setelah tag rilis ada dan setelah preflight npm OpenClaw berhasil. Workflow ini memverifikasi `pnpm plugins:sync:check`, men-dispatch `Plugin NPM Release` untuk semua package plugin yang dapat dipublikasikan, men-dispatch `Plugin ClawHub Release` untuk SHA rilis yang sama, dan baru kemudian men-dispatch `OpenClaw NPM Release` dengan `preflight_run_id` yang tersimpan. ```bash gh workflow run openclaw-release-publish.yml \ @@ -177,41 +170,33 @@ gh workflow run openclaw-release-publish.yml \ -f npm_dist_tag=beta ``` -Untuk bukti commit yang dipin pada branch yang bergerak cepat, gunakan helper alih-alih -`gh workflow run ... --ref main -f ref=`: +Untuk bukti commit yang dipin pada branch yang bergerak cepat, gunakan helper alih-alih `gh workflow run ... --ref main -f ref=`: ```bash pnpm ci:full-release --sha ``` -Ref dispatch workflow GitHub harus berupa branch atau tag, bukan SHA commit mentah. Helper -mendorong branch sementara `release-ci/-...` pada SHA target, -mendispatch `Full Release Validation` dari ref yang dipin itu, memverifikasi setiap -workflow anak `headSha` cocok dengan target, dan menghapus branch sementara ketika -run selesai. Verifier payung juga gagal jika ada workflow anak yang berjalan pada -SHA berbeda. +Ref dispatch workflow GitHub harus berupa branch atau tag, bukan SHA commit mentah. Helper mendorong branch sementara `release-ci/-...` pada SHA target, men-dispatch `Full Release Validation` dari ref yang dipin tersebut, memverifikasi setiap `headSha` workflow anak cocok dengan target, dan menghapus branch sementara ketika run selesai. Pemverifikasi payung juga gagal jika ada workflow anak yang berjalan pada SHA berbeda. -`release_profile` mengontrol cakupan live/provider yang diteruskan ke pemeriksaan rilis. Workflow -rilis manual default ke `stable`; gunakan `full` hanya ketika Anda -sengaja menginginkan matriks advisory provider/media yang luas. +`release_profile` mengontrol keluasan live/provider yang diteruskan ke pemeriksaan rilis. Workflow rilis manual default ke `stable`; gunakan `full` hanya ketika Anda sengaja menginginkan matriks provider/media advisory yang luas. -- `minimum` mempertahankan lane OpenAI/core paling cepat yang kritis untuk rilis. +- `minimum` mempertahankan lane OpenAI/core tercepat yang kritis untuk rilis. - `stable` menambahkan set provider/backend stabil. -- `full` menjalankan matriks advisory provider/media yang luas. +- `full` menjalankan matriks provider/media advisory yang luas. -Payung mencatat id run anak yang didispatch, dan job final `Verify full validation` memeriksa ulang conclusion run anak saat ini serta menambahkan tabel job terlambat untuk setiap run anak. Jika workflow anak dijalankan ulang dan menjadi hijau, jalankan ulang hanya job verifier induk untuk menyegarkan hasil payung dan ringkasan timing. +Payung mencatat id run anak yang di-dispatch, dan pekerjaan final `Verify full validation` memeriksa ulang kesimpulan run anak saat ini serta menambahkan tabel pekerjaan paling lambat untuk setiap run anak. Jika workflow anak dijalankan ulang dan menjadi hijau, jalankan ulang hanya pekerjaan pemverifikasi induk untuk menyegarkan hasil payung dan ringkasan timing. Untuk pemulihan, baik `Full Release Validation` maupun `OpenClaw Release Checks` menerima `rerun_group`. Gunakan `all` untuk kandidat rilis, `ci` hanya untuk child CI penuh normal, `plugin-prerelease` hanya untuk child prarilis Plugin, `release-checks` untuk setiap child rilis, atau grup yang lebih sempit: `install-smoke`, `cross-os`, `live-e2e`, `package`, `qa`, `qa-parity`, `qa-live`, atau `npm-telegram` pada umbrella. Ini menjaga rerun release box yang gagal tetap terbatas setelah perbaikan terfokus. -`OpenClaw Release Checks` menggunakan ref workflow tepercaya untuk menyelesaikan ref yang dipilih satu kali menjadi tarball `release-package-under-test`, lalu meneruskan artefak itu ke workflow Docker jalur rilis live/E2E dan shard penerimaan paket. Ini menjaga byte paket tetap konsisten di seluruh release box dan menghindari pemaketan ulang kandidat yang sama dalam beberapa job child. +`OpenClaw Release Checks` menggunakan ref workflow tepercaya untuk me-resolve ref terpilih sekali menjadi tarball `release-package-under-test`, lalu meneruskan artefak itu ke workflow Docker jalur rilis live/E2E dan shard penerimaan paket. Ini menjaga byte paket tetap konsisten di seluruh release box dan menghindari pengemasan ulang kandidat yang sama di beberapa job child. Run `Full Release Validation` duplikat untuk `ref=main` dan `rerun_group=all` menggantikan umbrella yang lebih lama. Monitor parent membatalkan workflow child apa pun yang -sudah didispatch saat parent dibatalkan, sehingga validasi main yang lebih baru -tidak tertahan di belakang run release-check usang berdurasi dua jam. Validasi branch/tag rilis +sudah dikirim saat parent dibatalkan, sehingga validasi main yang lebih baru +tidak antre di belakang run release-check basi selama dua jam. Validasi branch/tag rilis dan grup rerun terfokus tetap memakai `cancel-in-progress: false`. -## Shard Live dan E2E +## Shard live dan E2E Child live/E2E rilis tetap mempertahankan cakupan native `pnpm test:live` yang luas, tetapi menjalankannya sebagai shard bernama melalui `scripts/test-live-shard.mjs`, bukan satu job serial: @@ -225,61 +210,61 @@ Child live/E2E rilis tetap mempertahankan cakupan native `pnpm test:live` yang l - `native-live-extensions-openai` - `native-live-extensions-o-z-other` - `native-live-extensions-xai` -- shard audio/video media terpisah dan shard musik yang difilter berdasarkan provider +- shard media audio/video terpisah dan shard musik yang difilter berdasarkan provider -Ini mempertahankan cakupan file yang sama sekaligus membuat kegagalan provider live yang lambat lebih mudah dijalankan ulang dan didiagnosis. Nama shard agregat `native-live-extensions-o-z`, `native-live-extensions-media`, dan `native-live-extensions-media-music` tetap valid untuk rerun manual sekali jalan. +Ini mempertahankan cakupan file yang sama sambil membuat kegagalan provider live yang lambat lebih mudah di-rerun dan didiagnosis. Nama shard agregat `native-live-extensions-o-z`, `native-live-extensions-media`, dan `native-live-extensions-media-music` tetap valid untuk rerun manual sekali jalan. -Shard media live native berjalan di `ghcr.io/openclaw/openclaw-live-media-runner:ubuntu-24.04`, yang dibuat oleh workflow `Live Media Runner Image`. Image itu memasang `ffmpeg` dan `ffprobe` terlebih dahulu; job media hanya memverifikasi binary sebelum setup. Pertahankan suite live berbasis Docker pada runner Blacksmith normal — job container bukan tempat yang tepat untuk menjalankan pengujian Docker bertingkat. +Shard media live native berjalan di `ghcr.io/openclaw/openclaw-live-media-runner:ubuntu-24.04`, yang dibuat oleh workflow `Live Media Runner Image`. Image itu sudah memasang `ffmpeg` dan `ffprobe`; job media hanya memverifikasi biner sebelum setup. Pertahankan suite live berbasis Docker pada runner Blacksmith normal — job container bukan tempat yang tepat untuk meluncurkan pengujian Docker bersarang. -Shard model/backend live berbasis Docker menggunakan image bersama terpisah `ghcr.io/openclaw/openclaw-live-test:` per commit yang dipilih. Workflow rilis live membuat dan mendorong image itu satu kali, lalu shard model live Docker, Gateway yang di-shard berdasarkan provider, backend CLI, bind ACP, dan harness Codex berjalan dengan `OPENCLAW_SKIP_DOCKER_BUILD=1`. Shard Docker Gateway membawa batas `timeout` eksplisit tingkat skrip di bawah timeout job workflow sehingga container atau jalur pembersihan yang macet gagal cepat alih-alih menghabiskan seluruh anggaran release-check. Jika shard tersebut membangun ulang target Docker sumber penuh secara independen, run rilis salah konfigurasi dan akan membuang waktu nyata pada build image duplikat. +Shard model/backend live berbasis Docker menggunakan image bersama terpisah `ghcr.io/openclaw/openclaw-live-test:` per commit terpilih. Workflow rilis live membuat dan push image itu sekali, lalu shard model live Docker, Gateway yang di-shard berdasarkan provider, backend CLI, bind ACP, dan harness Codex berjalan dengan `OPENCLAW_SKIP_DOCKER_BUILD=1`. Shard Docker Gateway membawa batas `timeout` tingkat skrip eksplisit di bawah timeout job workflow agar container atau jalur cleanup yang macet gagal cepat alih-alih menghabiskan seluruh anggaran release-check. Jika shard tersebut membangun ulang target Docker sumber penuh secara independen, run rilis salah konfigurasi dan akan membuang waktu dinding untuk build image duplikat. ## Penerimaan Paket -Gunakan `Package Acceptance` ketika pertanyaannya adalah "apakah paket OpenClaw yang dapat dipasang ini berfungsi sebagai produk?" Ini berbeda dari CI normal: CI normal memvalidasi source tree, sementara penerimaan paket memvalidasi satu tarball melalui harness Docker E2E yang sama yang digunakan pengguna setelah install atau update. +Gunakan `Package Acceptance` ketika pertanyaannya adalah "apakah paket OpenClaw yang dapat diinstal ini bekerja sebagai produk?" Ini berbeda dari CI normal: CI normal memvalidasi source tree, sedangkan penerimaan paket memvalidasi satu tarball melalui harness Docker E2E yang sama yang digunakan pengguna setelah install atau update. ### Job -1. `resolve_package` melakukan checkout `workflow_ref`, menyelesaikan satu kandidat paket, menulis `.artifacts/docker-e2e-package/openclaw-current.tgz`, menulis `.artifacts/docker-e2e-package/package-candidate.json`, mengunggah keduanya sebagai artefak `package-under-test`, dan mencetak sumber, ref workflow, ref paket, versi, SHA-256, serta profil dalam ringkasan langkah GitHub. -2. `docker_acceptance` memanggil `openclaw-live-and-e2e-checks-reusable.yml` dengan `ref=workflow_ref` dan `package_artifact_name=package-under-test`. Workflow reusable mengunduh artefak itu, memvalidasi inventaris tarball, menyiapkan image Docker package-digest bila diperlukan, dan menjalankan lane Docker yang dipilih terhadap paket itu, bukan memaketkan checkout workflow. Saat suatu profil memilih beberapa `docker_lanes` bertarget, workflow reusable menyiapkan paket dan image bersama satu kali, lalu menyebarkan lane tersebut sebagai job Docker bertarget paralel dengan artefak unik. -3. `package_telegram` secara opsional memanggil `NPM Telegram Beta E2E`. Ini berjalan ketika `telegram_mode` bukan `none` dan memasang artefak `package-under-test` yang sama ketika Penerimaan Paket menyelesaikan satu paket; dispatch Telegram mandiri masih dapat memasang spec npm yang sudah dipublikasikan. +1. `resolve_package` checkout `workflow_ref`, me-resolve satu kandidat paket, menulis `.artifacts/docker-e2e-package/openclaw-current.tgz`, menulis `.artifacts/docker-e2e-package/package-candidate.json`, mengunggah keduanya sebagai artefak `package-under-test`, dan mencetak sumber, ref workflow, ref paket, versi, SHA-256, dan profil dalam ringkasan langkah GitHub. +2. `docker_acceptance` memanggil `openclaw-live-and-e2e-checks-reusable.yml` dengan `ref=workflow_ref` dan `package_artifact_name=package-under-test`. Workflow reusable mengunduh artefak itu, memvalidasi inventaris tarball, menyiapkan image Docker package-digest bila diperlukan, dan menjalankan lane Docker terpilih terhadap paket itu, bukan mengemas checkout workflow. Ketika sebuah profil memilih beberapa `docker_lanes` bertarget, workflow reusable menyiapkan paket dan image bersama sekali, lalu menyebarkan lane tersebut sebagai job Docker bertarget paralel dengan artefak unik. +3. `package_telegram` secara opsional memanggil `NPM Telegram Beta E2E`. Ini berjalan ketika `telegram_mode` bukan `none` dan menginstal artefak `package-under-test` yang sama ketika Penerimaan Paket me-resolve satu paket; dispatch Telegram mandiri tetap dapat menginstal spec npm yang sudah dipublikasikan. 4. `summary` menggagalkan workflow jika resolusi paket, penerimaan Docker, atau lane Telegram opsional gagal. ### Sumber kandidat -- `source=npm` hanya menerima `openclaw@alpha`, `openclaw@beta`, `openclaw@latest`, atau versi rilis OpenClaw persis seperti `openclaw@2026.4.27-beta.2`. Gunakan ini untuk penerimaan prarilis/stabil yang sudah dipublikasikan. -- `source=ref` memaketkan branch, tag, atau SHA commit penuh `package_ref` tepercaya. Resolver mengambil branch/tag OpenClaw, memverifikasi commit yang dipilih dapat dijangkau dari riwayat branch repositori atau tag rilis, memasang dependensi dalam worktree detached, dan memaketkannya dengan `scripts/package-openclaw-for-docker.mjs`. +- `source=npm` hanya menerima `openclaw@beta`, `openclaw@latest`, atau versi rilis OpenClaw persis seperti `openclaw@2026.4.27-beta.2`. Gunakan ini untuk penerimaan prarilis/stabil yang telah dipublikasikan. +- `source=ref` mengemas branch, tag, atau SHA commit penuh `package_ref` tepercaya. Resolver mengambil branch/tag OpenClaw, memverifikasi commit terpilih dapat dijangkau dari riwayat branch repositori atau tag rilis, memasang dependensi dalam worktree terlepas, dan mengemasnya dengan `scripts/package-openclaw-for-docker.mjs`. - `source=url` mengunduh `.tgz` HTTPS; `package_sha256` wajib. - `source=artifact` mengunduh satu `.tgz` dari `artifact_run_id` dan `artifact_name`; `package_sha256` opsional tetapi sebaiknya disediakan untuk artefak yang dibagikan secara eksternal. -Pisahkan `workflow_ref` dan `package_ref`. `workflow_ref` adalah kode workflow/harness tepercaya yang menjalankan pengujian. `package_ref` adalah commit sumber yang dipaketkan ketika `source=ref`. Ini memungkinkan harness pengujian saat ini memvalidasi commit sumber tepercaya yang lebih lama tanpa menjalankan logika workflow lama. +Jaga `workflow_ref` dan `package_ref` tetap terpisah. `workflow_ref` adalah kode workflow/harness tepercaya yang menjalankan pengujian. `package_ref` adalah commit sumber yang dikemas ketika `source=ref`. Ini memungkinkan harness pengujian saat ini memvalidasi commit sumber tepercaya yang lebih lama tanpa menjalankan logika workflow lama. ### Profil suite - `smoke` — `npm-onboard-channel-agent`, `gateway-network`, `config-reload` - `package` — `npm-onboard-channel-agent`, `doctor-switch`, `update-channel-switch`, `upgrade-survivor`, `published-upgrade-survivor`, `plugins-offline`, `plugin-update` - `product` — `package` plus `mcp-channels`, `cron-mcp-cleanup`, `openai-web-search-minimal`, `openwebui` -- `full` — chunk jalur rilis Docker penuh dengan OpenWebUI +- `full` — potongan jalur rilis Docker penuh dengan OpenWebUI - `custom` — `docker_lanes` persis; wajib ketika `suite_profile=custom` -Profil `package` menggunakan cakupan Plugin offline sehingga validasi paket yang dipublikasikan tidak bergantung pada ketersediaan ClawHub live. Lane Telegram opsional menggunakan kembali artefak `package-under-test` dalam `NPM Telegram Beta E2E`, dengan jalur spec npm yang dipublikasikan tetap dipertahankan untuk dispatch mandiri. +Profil `package` menggunakan cakupan Plugin offline agar validasi paket yang dipublikasikan tidak bergantung pada ketersediaan ClawHub live. Lane Telegram opsional menggunakan ulang artefak `package-under-test` di `NPM Telegram Beta E2E`, dengan jalur spec npm yang dipublikasikan tetap dipertahankan untuk dispatch mandiri. Untuk kebijakan khusus pengujian update dan Plugin, termasuk perintah lokal, lane Docker, input Penerimaan Paket, default rilis, dan triase kegagalan, lihat [Menguji update dan Plugin](/id/help/testing-updates-plugins). -Release checks memanggil Penerimaan Paket dengan `source=artifact`, artefak paket rilis yang disiapkan, `suite_profile=custom`, `docker_lanes='doctor-switch update-channel-switch upgrade-survivor published-upgrade-survivor plugins-offline plugin-update'`, `published_upgrade_survivor_baselines=all-since-2026.4.23`, `published_upgrade_survivor_scenarios=reported-issues`, dan `telegram_mode=mock-openai`. Ini menjaga bukti migrasi paket, update, pembersihan dependensi Plugin usang, perbaikan install Plugin yang dikonfigurasi, Plugin offline, plugin-update, dan Telegram pada tarball paket terselesaikan yang sama. Setel `package_acceptance_package_spec` pada Full Release Validation atau OpenClaw Release Checks untuk menjalankan matriks yang sama terhadap paket npm yang sudah dikirim, bukan artefak yang dibuat dari SHA. Release checks lintas-OS tetap mencakup onboarding, installer, dan perilaku platform yang spesifik OS; validasi produk paket/update harus dimulai dengan Penerimaan Paket. Lane Docker `published-upgrade-survivor` memvalidasi satu baseline paket yang dipublikasikan per run. Dalam Penerimaan Paket, tarball `package-under-test` yang diselesaikan selalu menjadi kandidat dan `published_upgrade_survivor_baseline` memilih baseline publikasi fallback, default-nya `openclaw@latest`; perintah rerun lane yang gagal mempertahankan baseline itu. Setel `published_upgrade_survivor_baselines=all-since-2026.4.23` untuk memperluas Full Release CI ke setiap rilis npm stabil dari `2026.4.23` hingga `latest`; `release-history` tetap tersedia untuk sampling manual yang lebih luas dengan anchor pra-tanggal yang lebih lama. Setel `published_upgrade_survivor_scenarios=reported-issues` untuk memperluas baseline yang sama ke fixture berbentuk issue untuk config Feishu, file bootstrap/persona yang dipertahankan, install Plugin OpenClaw yang dikonfigurasi, jalur log tilde, dan root dependensi Plugin legacy yang usang. Workflow `Update Migration` terpisah menggunakan lane Docker `update-migration` dengan `all-since-2026.4.23` dan `plugin-deps-cleanup` ketika pertanyaannya adalah pembersihan update publikasi yang menyeluruh, bukan keluasan Full Release CI normal. Run agregat lokal dapat meneruskan spec paket persis dengan `OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPECS`, mempertahankan satu lane dengan `OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPEC` seperti `openclaw@2026.4.15`, atau menyetel `OPENCLAW_UPGRADE_SURVIVOR_SCENARIOS` untuk matriks skenario. Lane yang dipublikasikan mengonfigurasi baseline dengan resep perintah `openclaw config set` bawaan, merekam langkah resep di `summary.json`, dan memeriksa `/healthz`, `/readyz`, plus status RPC setelah Gateway mulai. Lane fresh paket dan installer Windows juga memverifikasi bahwa paket yang terpasang dapat mengimpor override browser-control dari jalur Windows absolut mentah. Smoke agent-turn lintas-OS OpenAI default ke `OPENCLAW_CROSS_OS_OPENAI_MODEL` ketika disetel, jika tidak `openai/gpt-5.4`, sehingga bukti install dan Gateway tetap memakai model pengujian GPT-5 sambil menghindari default GPT-4.x. +Release check memanggil Penerimaan Paket dengan `source=artifact`, artefak paket rilis yang sudah disiapkan, `suite_profile=custom`, `docker_lanes='doctor-switch update-channel-switch upgrade-survivor published-upgrade-survivor plugins-offline plugin-update'`, `published_upgrade_survivor_baselines=all-since-2026.4.23`, `published_upgrade_survivor_scenarios=reported-issues`, dan `telegram_mode=mock-openai`. Ini menjaga migrasi paket, update, cleanup dependensi Plugin basi, perbaikan install Plugin terkonfigurasi, Plugin offline, update Plugin, dan bukti Telegram pada tarball paket hasil resolusi yang sama. Setel `package_acceptance_package_spec` pada Full Release Validation atau OpenClaw Release Checks untuk menjalankan matriks yang sama terhadap paket npm yang sudah dikirim, bukan artefak yang dibuat dari SHA. Release check lintas OS tetap mencakup onboarding, installer, dan perilaku platform spesifik OS; validasi produk paket/update sebaiknya dimulai dengan Penerimaan Paket. Lane Docker `published-upgrade-survivor` memvalidasi satu baseline paket yang dipublikasikan per run. Dalam Penerimaan Paket, tarball `package-under-test` yang di-resolve selalu menjadi kandidat dan `published_upgrade_survivor_baseline` memilih baseline fallback yang dipublikasikan, dengan default `openclaw@latest`; perintah rerun lane yang gagal mempertahankan baseline itu. Setel `published_upgrade_survivor_baselines=all-since-2026.4.23` untuk memperluas Full Release CI ke setiap rilis npm stabil dari `2026.4.23` hingga `latest`; `release-history` tetap tersedia untuk sampling manual yang lebih luas dengan anchor pra-tanggal yang lebih lama. Setel `published_upgrade_survivor_scenarios=reported-issues` untuk memperluas baseline yang sama ke fixture berbentuk issue untuk config Feishu, file bootstrap/persona yang dipertahankan, install Plugin OpenClaw terkonfigurasi, path log tilde, dan root dependensi Plugin legacy basi. Workflow `Update Migration` terpisah menggunakan lane Docker `update-migration` dengan `all-since-2026.4.23` dan `plugin-deps-cleanup` ketika pertanyaannya adalah cleanup update yang dipublikasikan secara menyeluruh, bukan keluasan Full Release CI normal. Run agregat lokal dapat meneruskan spec paket persis dengan `OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPECS`, mempertahankan satu lane dengan `OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPEC` seperti `openclaw@2026.4.15`, atau menyetel `OPENCLAW_UPGRADE_SURVIVOR_SCENARIOS` untuk matriks skenario. Lane yang dipublikasikan mengonfigurasi baseline dengan resep perintah `openclaw config set` bawaan, mencatat langkah resep di `summary.json`, dan mem-probe `/healthz`, `/readyz`, plus status RPC setelah Gateway start. Lane fresh paket dan installer Windows juga memverifikasi bahwa paket terinstal dapat mengimpor override browser-control dari path Windows absolut mentah. Smoke agent-turn lintas OS OpenAI default ke `OPENCLAW_CROSS_OS_OPENAI_MODEL` bila disetel, jika tidak `openai/gpt-5.4`, sehingga bukti install dan Gateway tetap memakai model pengujian GPT-5 sambil menghindari default GPT-4.x. ### Jendela kompatibilitas legacy Penerimaan Paket memiliki jendela kompatibilitas legacy terbatas untuk paket yang sudah dipublikasikan. Paket hingga `2026.4.25`, termasuk `2026.4.25-beta.*`, dapat menggunakan jalur kompatibilitas: -- entri QA privat yang diketahui dalam `dist/postinstall-inventory.json` dapat menunjuk ke file yang dihilangkan dari tarball; -- `doctor-switch` dapat melewati subkasus persistensi `gateway install --wrapper` ketika paket tidak mengekspos flag itu; -- `update-channel-switch` dapat memangkas `pnpm.patchedDependencies` yang hilang dari fixture git palsu turunan tarball dan dapat mencatat `update.channel` tersimpan yang hilang; -- smoke Plugin dapat membaca lokasi catatan install legacy atau menerima persistensi catatan install marketplace yang hilang; -- `plugin-update` dapat mengizinkan migrasi metadata config sambil tetap mewajibkan catatan install dan perilaku tanpa reinstall tetap tidak berubah. +- entri QA privat yang diketahui di `dist/postinstall-inventory.json` boleh menunjuk ke file yang dihilangkan dari tarball; +- `doctor-switch` boleh melewati subkasus persistensi `gateway install --wrapper` ketika paket tidak mengekspos flag itu; +- `update-channel-switch` boleh memangkas `pnpm.patchedDependencies` yang hilang dari fixture git palsu turunan tarball dan boleh mencatat `update.channel` persisten yang hilang; +- smoke Plugin boleh membaca lokasi install-record legacy atau menerima persistensi install-record marketplace yang hilang; +- `plugin-update` boleh mengizinkan migrasi metadata config sambil tetap mewajibkan install record dan perilaku tanpa reinstall tetap tidak berubah. -Paket `2026.4.26` yang dipublikasikan juga dapat memperingatkan untuk file stamp metadata build lokal yang sudah dikirim. Paket yang lebih baru harus memenuhi kontrak modern; kondisi yang sama gagal, bukan memperingatkan atau dilewati. +Paket `2026.4.26` yang dipublikasikan juga boleh memperingatkan untuk file stamp metadata build lokal yang sudah dikirim. Paket yang lebih baru harus memenuhi kontrak modern; kondisi yang sama akan gagal, bukan memperingatkan atau dilewati. ### Contoh @@ -322,110 +307,110 @@ gh workflow run package-acceptance.yml \ -f docker_lanes='install-e2e plugin-update' ``` -Saat men-debug proses penerimaan paket yang gagal, mulai dari ringkasan `resolve_package` untuk mengonfirmasi sumber paket, versi, dan SHA-256. Lalu periksa proses turunan `docker_acceptance` dan artefak Docker-nya: `.artifacts/docker-tests/**/summary.json`, `failures.json`, log lane, timing fase, dan perintah jalankan ulang. Utamakan menjalankan ulang profil paket yang gagal atau lane Docker persisnya daripada menjalankan ulang validasi rilis penuh. +Saat men-debug eksekusi penerimaan paket yang gagal, mulai dari ringkasan `resolve_package` untuk mengonfirmasi sumber paket, versi, dan SHA-256. Lalu periksa eksekusi anak `docker_acceptance` dan artefak Docker-nya: `.artifacts/docker-tests/**/summary.json`, `failures.json`, log lane, pengaturan waktu fase, dan perintah eksekusi ulang. Lebih baik jalankan ulang profil paket yang gagal atau lane Docker yang tepat daripada menjalankan ulang validasi rilis penuh. ## Smoke instalasi -Workflow `Install Smoke` yang terpisah menggunakan ulang skrip cakupan yang sama melalui job `preflight` miliknya sendiri. Workflow ini membagi cakupan smoke menjadi `run_fast_install_smoke` dan `run_full_install_smoke`. +Alur kerja `Install Smoke` terpisah menggunakan kembali skrip cakupan yang sama melalui job `preflight` miliknya sendiri. Alur ini membagi cakupan smoke menjadi `run_fast_install_smoke` dan `run_full_install_smoke`. -- **Jalur cepat** berjalan untuk pull request yang menyentuh permukaan Docker/paket, perubahan paket/manifes Plugin bawaan, atau permukaan Plugin SDK core plugin/channel/gateway yang diuji oleh job smoke Docker. Perubahan Plugin bawaan khusus sumber, edit khusus pengujian, dan edit khusus dokumentasi tidak mencadangkan worker Docker. Jalur cepat membangun image Dockerfile root satu kali, memeriksa CLI, menjalankan smoke CLI agents delete shared-workspace, menjalankan e2e container gateway-network, memverifikasi arg build ekstensi bawaan, dan menjalankan profil Docker Plugin bawaan terbatas di bawah batas waktu perintah agregat 240 detik (setiap Docker run skenario dibatasi secara terpisah). -- **Jalur penuh** mempertahankan instalasi paket QR serta cakupan Docker/update installer untuk proses terjadwal malam, dispatch manual, pemeriksaan rilis workflow-call, dan pull request yang benar-benar menyentuh permukaan installer/paket/Docker. Dalam mode penuh, install-smoke menyiapkan atau menggunakan ulang satu image smoke Dockerfile root GHCR target-SHA, lalu menjalankan instalasi paket QR, smoke Dockerfile/gateway root, smoke installer/update, dan E2E Docker Plugin bawaan cepat sebagai job terpisah agar pekerjaan installer tidak menunggu di belakang smoke image root. +- **Jalur cepat** berjalan untuk pull request yang menyentuh permukaan Docker/paket, perubahan paket/manifes Plugin bawaan, atau permukaan Plugin inti/channel/Gateway/Plugin SDK yang diuji oleh job smoke Docker. Perubahan Plugin bawaan yang hanya menyentuh sumber, edit hanya pengujian, dan edit hanya dokumentasi tidak mencadangkan worker Docker. Jalur cepat membangun image Dockerfile root satu kali, memeriksa CLI, menjalankan smoke CLI hapus agen workspace bersama, menjalankan e2e gateway-network kontainer, memverifikasi arg build ekstensi bawaan, dan menjalankan profil Docker Plugin bawaan terbatas dengan batas waktu perintah agregat 240 detik (setiap eksekusi Docker skenario dibatasi secara terpisah). +- **Jalur penuh** mempertahankan instalasi paket QR dan cakupan Docker/update penginstal untuk eksekusi terjadwal malam, dispatch manual, pemeriksaan rilis workflow-call, dan pull request yang benar-benar menyentuh permukaan penginstal/paket/Docker. Dalam mode penuh, install-smoke menyiapkan atau menggunakan kembali satu image smoke Dockerfile root GHCR target-SHA, lalu menjalankan instalasi paket QR, smoke Dockerfile root/Gateway, smoke penginstal/update, dan E2E Docker Plugin bawaan jalur cepat sebagai job terpisah sehingga pekerjaan penginstal tidak menunggu di belakang smoke image root. -Push `main` (termasuk commit merge) tidak memaksa jalur penuh; ketika logika cakupan perubahan akan meminta cakupan penuh pada push, workflow mempertahankan smoke Docker cepat dan menyerahkan smoke instalasi penuh ke validasi malam atau rilis. +Push `main` (termasuk commit merge) tidak memaksa jalur penuh; ketika logika cakupan perubahan akan meminta cakupan penuh pada push, alur kerja mempertahankan smoke Docker cepat dan menyerahkan smoke instalasi penuh ke validasi malam atau rilis. -Smoke image-provider instalasi global Bun yang lambat dikendalikan secara terpisah oleh `run_bun_global_install_smoke`. Smoke ini berjalan pada jadwal malam dan dari workflow pemeriksaan rilis, dan dispatch manual `Install Smoke` dapat ikut menyertakannya, tetapi pull request dan push `main` tidak. Pengujian Docker QR dan installer tetap memiliki Dockerfile berfokus instalasinya sendiri. +Smoke penyedia image instalasi global Bun yang lambat dipagari secara terpisah oleh `run_bun_global_install_smoke`. Ini berjalan pada jadwal malam dan dari alur kerja pemeriksaan rilis, dan dispatch manual `Install Smoke` dapat memilih untuk mengaktifkannya, tetapi pull request dan push `main` tidak. Pengujian Docker QR dan penginstal mempertahankan Dockerfile mereka sendiri yang berfokus pada instalasi. -## Docker E2E lokal +## E2E Docker lokal -`pnpm test:docker:all` melakukan prebuild satu image live-test bersama, mengemas OpenClaw sekali sebagai tarball npm, dan membangun dua image bersama `scripts/e2e/Dockerfile`: +`pnpm test:docker:all` melakukan prabangun satu image live-test bersama, mengemas OpenClaw sekali sebagai tarball npm, dan membangun dua image bersama `scripts/e2e/Dockerfile`: -- runner Node/Git kosong untuk lane installer/update/plugin-dependency; +- runner Node/Git polos untuk lane penginstal/update/dependensi-Plugin; - image fungsional yang menginstal tarball yang sama ke `/app` untuk lane fungsionalitas normal. -Definisi lane Docker berada di `scripts/lib/docker-e2e-scenarios.mjs`, logika planner berada di `scripts/lib/docker-e2e-plan.mjs`, dan runner hanya mengeksekusi rencana yang dipilih. Scheduler memilih image per lane dengan `OPENCLAW_DOCKER_E2E_BARE_IMAGE` dan `OPENCLAW_DOCKER_E2E_FUNCTIONAL_IMAGE`, lalu menjalankan lane dengan `OPENCLAW_SKIP_DOCKER_BUILD=1`. +Definisi lane Docker berada di `scripts/lib/docker-e2e-scenarios.mjs`, logika perencana berada di `scripts/lib/docker-e2e-plan.mjs`, dan runner hanya mengeksekusi rencana yang dipilih. Scheduler memilih image per lane dengan `OPENCLAW_DOCKER_E2E_BARE_IMAGE` dan `OPENCLAW_DOCKER_E2E_FUNCTIONAL_IMAGE`, lalu menjalankan lane dengan `OPENCLAW_SKIP_DOCKER_BUILD=1`. -### Yang dapat disetel +### Parameter yang dapat disetel -| Variabel | Default | Tujuan | -| -------------------------------------- | ------- | --------------------------------------------------------------------------------------------- | -| `OPENCLAW_DOCKER_ALL_PARALLELISM` | 10 | Jumlah slot main-pool untuk lane normal. | -| `OPENCLAW_DOCKER_ALL_TAIL_PARALLELISM` | 10 | Jumlah slot tail-pool yang sensitif provider. | -| `OPENCLAW_DOCKER_ALL_LIVE_LIMIT` | 9 | Batas lane live serentak agar provider tidak melakukan throttle. | -| `OPENCLAW_DOCKER_ALL_NPM_LIMIT` | 10 | Batas lane instalasi npm serentak. | -| `OPENCLAW_DOCKER_ALL_SERVICE_LIMIT` | 7 | Batas lane multi-service serentak. | -| `OPENCLAW_DOCKER_ALL_START_STAGGER_MS` | 2000 | Jeda antarawal lane untuk menghindari badai create daemon Docker; atur `0` tanpa jeda. | -| `OPENCLAW_DOCKER_ALL_LANE_TIMEOUT_MS` | 7200000 | Batas waktu fallback per lane (120 menit); lane live/tail terpilih memakai batas lebih ketat. | -| `OPENCLAW_DOCKER_ALL_DRY_RUN` | unset | `1` mencetak rencana scheduler tanpa menjalankan lane. | -| `OPENCLAW_DOCKER_ALL_LANES` | unset | Daftar lane persis yang dipisahkan koma; melewati smoke cleanup agar agent dapat mereproduksi satu lane yang gagal. | +| Variabel | Bawaan | Tujuan | +| -------------------------------------- | ------- | --------------------------------------------------------------------------------------------------- | +| `OPENCLAW_DOCKER_ALL_PARALLELISM` | 10 | Jumlah slot pool utama untuk lane normal. | +| `OPENCLAW_DOCKER_ALL_TAIL_PARALLELISM` | 10 | Jumlah slot pool akhir yang sensitif terhadap penyedia. | +| `OPENCLAW_DOCKER_ALL_LIVE_LIMIT` | 9 | Batas lane live serentak agar penyedia tidak melakukan throttling. | +| `OPENCLAW_DOCKER_ALL_NPM_LIMIT` | 10 | Batas lane instalasi npm serentak. | +| `OPENCLAW_DOCKER_ALL_SERVICE_LIMIT` | 7 | Batas lane multi-layanan serentak. | +| `OPENCLAW_DOCKER_ALL_START_STAGGER_MS` | 2000 | Jeda antar-start lane untuk menghindari lonjakan pembuatan daemon Docker; setel `0` untuk tanpa jeda. | +| `OPENCLAW_DOCKER_ALL_LANE_TIMEOUT_MS` | 7200000 | Batas waktu fallback per lane (120 menit); lane live/akhir terpilih menggunakan batas lebih ketat. | +| `OPENCLAW_DOCKER_ALL_DRY_RUN` | unset | `1` mencetak rencana scheduler tanpa menjalankan lane. | +| `OPENCLAW_DOCKER_ALL_LANES` | unset | Daftar lane tepat yang dipisahkan koma; melewati smoke pembersihan agar agen dapat mereproduksi satu lane yang gagal. | -Lane yang lebih berat daripada batas efektifnya masih dapat dimulai dari pool kosong, lalu berjalan sendiri sampai kapasitas dilepas. Preflight agregat lokal memeriksa Docker, menghapus container OpenClaw E2E usang, memancarkan status active-lane, menyimpan timing lane untuk pengurutan paling lama lebih dulu, dan secara default berhenti menjadwalkan lane pooled baru setelah kegagalan pertama. +Lane yang lebih berat dari batas efektifnya tetap dapat mulai dari pool kosong, lalu berjalan sendiri hingga melepas kapasitas. Agregat lokal melakukan preflight Docker, menghapus kontainer OpenClaw E2E usang, memancarkan status lane aktif, mempertahankan pengaturan waktu lane untuk pengurutan yang terlama lebih dulu, dan secara bawaan berhenti menjadwalkan lane pool baru setelah kegagalan pertama. -### Workflow live/E2E yang dapat digunakan ulang +### Alur kerja live/E2E yang dapat digunakan kembali -Workflow live/E2E yang dapat digunakan ulang menanyakan `scripts/test-docker-all.mjs --plan-json` cakupan paket, jenis image, image live, lane, dan kredensial mana yang diperlukan. `scripts/docker-e2e.mjs` lalu mengonversi rencana itu menjadi output dan ringkasan GitHub. Workflow ini mengemas OpenClaw melalui `scripts/package-openclaw-for-docker.mjs`, mengunduh artefak paket dari run saat ini, atau mengunduh artefak paket dari `package_artifact_run_id`; memvalidasi inventaris tarball; membangun dan mendorong image Docker E2E bare/functional GHCR bertag digest paket melalui cache layer Docker Blacksmith saat rencana memerlukan lane yang sudah terinstal paket; dan menggunakan ulang input `docker_e2e_bare_image`/`docker_e2e_functional_image` yang disediakan atau image digest paket yang sudah ada alih-alih membangun ulang. Pull image Docker dicoba ulang dengan batas waktu 180 detik per percobaan yang terbatas agar stream registry/cache yang macet cepat dicoba ulang alih-alih menghabiskan sebagian besar jalur kritis CI. +Alur kerja live/E2E yang dapat digunakan kembali menanyakan `scripts/test-docker-all.mjs --plan-json` cakupan paket, jenis image, image live, lane, dan kredensial mana yang diperlukan. `scripts/docker-e2e.mjs` lalu mengonversi rencana tersebut menjadi output dan ringkasan GitHub. Alur ini mengemas OpenClaw melalui `scripts/package-openclaw-for-docker.mjs`, mengunduh artefak paket dari eksekusi saat ini, atau mengunduh artefak paket dari `package_artifact_run_id`; memvalidasi inventaris tarball; membangun dan mendorong image E2E Docker GHCR bare/fungsional bertag digest paket melalui cache layer Docker Blacksmith saat rencana membutuhkan lane dengan paket terinstal; dan menggunakan kembali input `docker_e2e_bare_image`/`docker_e2e_functional_image` yang disediakan atau image digest paket yang ada alih-alih membangun ulang. Pull image Docker dicoba ulang dengan batas waktu 180 detik per percobaan yang terbatas sehingga stream registry/cache yang tersangkut mencoba ulang dengan cepat alih-alih menghabiskan sebagian besar jalur kritis CI. ### Chunk jalur rilis -Cakupan Docker rilis menjalankan job chunk yang lebih kecil dengan `OPENCLAW_SKIP_DOCKER_BUILD=1` sehingga setiap chunk hanya menarik jenis image yang dibutuhkannya dan mengeksekusi beberapa lane melalui scheduler berbobot yang sama: +Cakupan Docker rilis menjalankan job yang dibagi menjadi chunk lebih kecil dengan `OPENCLAW_SKIP_DOCKER_BUILD=1` sehingga setiap chunk hanya menarik jenis image yang dibutuhkan dan mengeksekusi beberapa lane melalui scheduler berbobot yang sama: - `OPENCLAW_DOCKER_ALL_PROFILE=release-path` - `OPENCLAW_DOCKER_ALL_CHUNK=core | package-update-openai | package-update-anthropic | package-update-core | plugins-runtime-plugins | plugins-runtime-services | plugins-runtime-install-a..h` -Chunk Docker rilis saat ini adalah `core`, `package-update-openai`, `package-update-anthropic`, `package-update-core`, `plugins-runtime-plugins`, `plugins-runtime-services`, dan `plugins-runtime-install-a` hingga `plugins-runtime-install-h`. `plugins-runtime-core`, `plugins-runtime`, dan `plugins-integrations` tetap menjadi alias agregat Plugin/runtime. Alias lane `install-e2e` tetap menjadi alias jalankan ulang manual agregat untuk kedua lane installer provider. +Chunk Docker rilis saat ini adalah `core`, `package-update-openai`, `package-update-anthropic`, `package-update-core`, `plugins-runtime-plugins`, `plugins-runtime-services`, dan `plugins-runtime-install-a` hingga `plugins-runtime-install-h`. `plugins-runtime-core`, `plugins-runtime`, dan `plugins-integrations` tetap menjadi alias agregat Plugin/runtime. Alias lane `install-e2e` tetap menjadi alias eksekusi ulang manual agregat untuk kedua lane penginstal penyedia. -OpenWebUI digabungkan ke dalam `plugins-runtime-services` saat cakupan release-path penuh memintanya, dan mempertahankan chunk mandiri `openwebui` hanya untuk dispatch khusus OpenWebUI. Lane pembaruan bundled-channel mencoba ulang sekali untuk kegagalan jaringan npm sementara. +OpenWebUI digabungkan ke dalam `plugins-runtime-services` ketika cakupan release-path penuh memintanya, dan mempertahankan chunk `openwebui` mandiri hanya untuk dispatch khusus OpenWebUI. Lane update channel bawaan mencoba ulang sekali untuk kegagalan jaringan npm sementara. -Setiap chunk mengunggah `.artifacts/docker-tests/` dengan log lane, timing, `summary.json`, `failures.json`, timing fase, JSON rencana scheduler, tabel slow-lane, dan perintah jalankan ulang per lane. Input workflow `docker_lanes` menjalankan lane terpilih terhadap image yang sudah disiapkan alih-alih job chunk, sehingga debugging lane gagal tetap terbatas pada satu job Docker tertarget dan menyiapkan, mengunduh, atau menggunakan ulang artefak paket untuk run itu; jika lane terpilih adalah lane Docker live, job tertarget membangun image live-test secara lokal untuk jalankan ulang itu. Perintah jalankan ulang GitHub per lane yang dihasilkan menyertakan `package_artifact_run_id`, `package_artifact_name`, dan input image yang disiapkan saat nilai tersebut ada, sehingga lane yang gagal dapat menggunakan ulang paket dan image persis dari run yang gagal. +Setiap chunk mengunggah `.artifacts/docker-tests/` dengan log lane, pengaturan waktu, `summary.json`, `failures.json`, pengaturan waktu fase, JSON rencana scheduler, tabel lane lambat, dan perintah eksekusi ulang per lane. Input alur kerja `docker_lanes` menjalankan lane yang dipilih terhadap image yang telah disiapkan alih-alih job chunk, yang menjaga debugging lane gagal tetap terbatas pada satu job Docker bertarget dan menyiapkan, mengunduh, atau menggunakan kembali artefak paket untuk eksekusi tersebut; jika lane yang dipilih adalah lane Docker live, job bertarget membangun image live-test secara lokal untuk eksekusi ulang tersebut. Perintah eksekusi ulang GitHub per lane yang dihasilkan menyertakan `package_artifact_run_id`, `package_artifact_name`, dan input image yang telah disiapkan saat nilai tersebut ada, sehingga lane yang gagal dapat menggunakan kembali paket dan image yang tepat dari eksekusi yang gagal. ```bash pnpm test:docker:rerun # download Docker artifacts and print combined/per-lane targeted rerun commands pnpm test:docker:timings # slow-lane and phase critical-path summaries ``` -Workflow live/E2E terjadwal menjalankan suite Docker release-path penuh setiap hari. +Alur kerja live/E2E terjadwal menjalankan suite Docker release-path penuh setiap hari. ## Prarilis Plugin -`Plugin Prerelease` adalah cakupan produk/paket yang lebih mahal, jadi ini adalah workflow terpisah yang di-dispatch oleh `Full Release Validation` atau oleh operator eksplisit. Pull request normal, push `main`, dan dispatch CI manual mandiri tidak menjalankan suite tersebut. Workflow ini menyeimbangkan pengujian Plugin bawaan di delapan worker ekstensi; job shard ekstensi tersebut menjalankan hingga dua grup konfigurasi Plugin sekaligus dengan satu worker Vitest per grup dan heap Node yang lebih besar agar batch Plugin yang berat impor tidak membuat job CI tambahan. Jalur prarilis Docker khusus rilis mengelompokkan lane Docker tertarget dalam grup kecil untuk menghindari pencadangan puluhan runner untuk job berdurasi satu hingga tiga menit. +`Plugin Prerelease` adalah cakupan produk/paket yang lebih mahal, jadi ini adalah alur kerja terpisah yang di-dispatch oleh `Full Release Validation` atau oleh operator eksplisit. Pull request normal, push `main`, dan dispatch CI manual mandiri menonaktifkan suite tersebut. Alur ini menyeimbangkan pengujian Plugin bawaan di delapan worker ekstensi; job shard ekstensi tersebut menjalankan hingga dua grup konfigurasi Plugin sekaligus dengan satu worker Vitest per grup dan heap Node yang lebih besar agar batch Plugin dengan impor berat tidak membuat job CI tambahan. Jalur prarilis Docker khusus rilis mengelompokkan lane Docker bertarget dalam grup kecil untuk menghindari pencadangan puluhan runner untuk job berdurasi satu hingga tiga menit. ## QA Lab -QA Lab memiliki lane CI khusus di luar workflow utama yang dicakup secara cerdas. Paritas agentic berada di bawah harness QA dan rilis yang luas, bukan workflow PR mandiri. Gunakan `Full Release Validation` dengan `rerun_group=qa-parity` saat paritas harus ikut dalam run validasi luas. +QA Lab memiliki lane CI khusus di luar alur kerja bercakupan cerdas utama. Paritas agentic ditempatkan di bawah harness QA dan rilis luas, bukan alur kerja PR mandiri. Gunakan `Full Release Validation` dengan `rerun_group=qa-parity` ketika paritas harus ikut dalam eksekusi validasi luas. -- Workflow `QA-Lab - All Lanes` berjalan setiap malam pada `main` dan pada dispatch manual; workflow ini mem-fan out lane paritas mock, lane Matrix live, serta lane Telegram dan Discord live sebagai job paralel. Job live menggunakan environment `qa-live-shared`, dan Telegram/Discord menggunakan lease Convex. +- Alur kerja `QA-Lab - All Lanes` berjalan setiap malam di `main` dan pada dispatch manual; alur ini menyebarkan lane paritas mock, lane Matrix live, serta lane Telegram dan Discord live sebagai job paralel. Job live menggunakan lingkungan `qa-live-shared`, dan Telegram/Discord menggunakan lease Convex. -Pemeriksaan rilis menjalankan lane transport live Matrix dan Telegram dengan provider mock deterministik dan model mock-qualified (`mock-openai/gpt-5.5` dan `mock-openai/gpt-5.5-alt`) sehingga kontrak channel terisolasi dari latensi model live dan startup provider-plugin normal. Gateway transport live menonaktifkan pencarian memori karena paritas QA mencakup perilaku memori secara terpisah; konektivitas provider dicakup oleh suite model live, provider native, dan provider Docker yang terpisah. +Pemeriksaan rilis menjalankan lane transport live Matrix dan Telegram dengan penyedia mock deterministik dan model yang memenuhi syarat mock (`mock-openai/gpt-5.5` dan `mock-openai/gpt-5.5-alt`) sehingga kontrak channel terisolasi dari latensi model live dan startup Plugin penyedia normal. Gateway transport live menonaktifkan pencarian memori karena paritas QA mencakup perilaku memori secara terpisah; konektivitas penyedia dicakup oleh suite model live, penyedia native, dan penyedia Docker yang terpisah. -Matrix menggunakan `--profile fast` untuk gate terjadwal dan rilis, menambahkan `--fail-fast` hanya ketika CLI yang di-checkout mendukungnya. Default CLI dan input workflow manual tetap `all`; dispatch manual `matrix_profile=all` selalu men-shard cakupan Matrix penuh ke dalam job `transport`, `media`, `e2ee-smoke`, `e2ee-deep`, dan `e2ee-cli`. +Matrix menggunakan `--profile fast` untuk gate terjadwal dan rilis, menambahkan `--fail-fast` hanya ketika CLI yang di-checkout mendukungnya. Bawaan CLI dan input alur kerja manual tetap `all`; dispatch manual `matrix_profile=all` selalu membagi cakupan Matrix penuh menjadi job `transport`, `media`, `e2ee-smoke`, `e2ee-deep`, dan `e2ee-cli`. `OpenClaw Release Checks` juga menjalankan lane QA Lab yang kritis untuk rilis sebelum persetujuan rilis; gate paritas QA-nya menjalankan paket kandidat dan baseline sebagai job lane paralel, lalu mengunduh kedua artefak ke job laporan kecil untuk perbandingan paritas akhir. -Untuk PR normal, ikuti bukti CI/check yang sesuai cakupan alih-alih memperlakukan paritas sebagai status wajib. +Untuk PR normal, ikuti bukti CI/pemeriksaan bercakupan alih-alih memperlakukan paritas sebagai status wajib. ## CodeQL -Alur kerja `CodeQL` sengaja merupakan pemindai keamanan lintas pertama yang sempit, bukan penyapuan repositori penuh. Penjaga harian, manual, dan pull request non-draf memindai kode alur kerja Actions ditambah permukaan JavaScript/TypeScript berisiko tertinggi dengan kueri keamanan berkeyakinan tinggi yang difilter ke `security-severity` tinggi/kritis. +Workflow `CodeQL` sengaja merupakan pemindai keamanan lintas-pertama yang sempit, bukan penyisiran repositori penuh. Pemindaian penjaga harian, manual, dan pull request non-draf memindai kode workflow Actions plus permukaan JavaScript/TypeScript berisiko tertinggi dengan kueri keamanan berkeyakinan tinggi yang difilter ke `security-severity` tinggi/kritis. -Penjaga pull request tetap ringan: penjaga ini hanya dimulai untuk perubahan di bawah `.github/actions`, `.github/codeql`, `.github/workflows`, `packages`, atau `src`, dan menjalankan matriks keamanan berkeyakinan tinggi yang sama seperti alur kerja terjadwal. CodeQL Android dan macOS tetap berada di luar bawaan PR. +Penjaga pull request tetap ringan: ia hanya dimulai untuk perubahan di bawah `.github/actions`, `.github/codeql`, `.github/workflows`, `packages`, atau `src`, dan menjalankan matriks keamanan berkeyakinan tinggi yang sama seperti workflow terjadwal. CodeQL Android dan macOS tetap berada di luar default PR. ### Kategori keamanan | Kategori | Permukaan | | ------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | -| `/codeql-security-high/core-auth-secrets` | Auth, rahasia, sandbox, Cron, dan baseline Gateway | -| `/codeql-security-high/channel-runtime-boundary` | Kontrak implementasi channel inti ditambah runtime Plugin channel, Gateway, Plugin SDK, rahasia, titik sentuh audit | -| `/codeql-security-high/network-ssrf-boundary` | SSRF inti, parsing IP, penjaga jaringan, web-fetch, dan permukaan kebijakan SSRF Plugin SDK | -| `/codeql-security-high/mcp-process-tool-boundary` | Server MCP, helper eksekusi proses, pengiriman keluar, dan gerbang eksekusi tool agen | -| `/codeql-security-high/plugin-trust-boundary` | Permukaan kepercayaan instalasi Plugin, loader, manifes, registry, instalasi package-manager, pemuatan sumber, dan kontrak paket Plugin SDK | +| `/codeql-security-high/core-auth-secrets` | Auth, secret, sandbox, cron, dan baseline gateway | +| `/codeql-security-high/channel-runtime-boundary` | Kontrak implementasi kanal inti plus runtime plugin kanal, gateway, Plugin SDK, secret, titik sentuh audit | +| `/codeql-security-high/network-ssrf-boundary` | Permukaan kebijakan SSRF inti, parsing IP, penjaga jaringan, web-fetch, dan SSRF Plugin SDK | +| `/codeql-security-high/mcp-process-tool-boundary` | Server MCP, helper eksekusi proses, pengiriman keluar, dan gerbang eksekusi tool agent | +| `/codeql-security-high/plugin-trust-boundary` | Permukaan kepercayaan instalasi Plugin, loader, manifest, registry, instalasi package-manager, source-loading, dan kontrak paket Plugin SDK | ### Shard keamanan khusus platform -- `CodeQL Android Critical Security` — shard keamanan Android terjadwal. Membangun aplikasi Android secara manual untuk CodeQL di runner Blacksmith Linux terkecil yang diterima oleh kewarasan alur kerja. Mengunggah di bawah `/codeql-critical-security/android`. -- `CodeQL macOS Critical Security` — shard keamanan macOS mingguan/manual. Membangun aplikasi macOS secara manual untuk CodeQL di Blacksmith macOS, memfilter hasil build dependensi keluar dari SARIF yang diunggah, dan mengunggah di bawah `/codeql-critical-security/macos`. Dipertahankan di luar bawaan harian karena build macOS mendominasi runtime meskipun bersih. +- `CodeQL Android Critical Security` — shard keamanan Android terjadwal. Membangun aplikasi Android secara manual untuk CodeQL pada runner Blacksmith Linux terkecil yang diterima oleh sanity workflow. Mengunggah di bawah `/codeql-critical-security/android`. +- `CodeQL macOS Critical Security` — shard keamanan macOS mingguan/manual. Membangun aplikasi macOS secara manual untuk CodeQL pada Blacksmith macOS, memfilter hasil build dependensi dari SARIF yang diunggah, dan mengunggah di bawah `/codeql-critical-security/macos`. Dipertahankan di luar default harian karena build macOS mendominasi runtime bahkan saat bersih. ### Kategori Kualitas Kritis -`CodeQL Critical Quality` adalah shard non-keamanan yang sepadan. Ini hanya menjalankan kueri kualitas JavaScript/TypeScript non-keamanan dengan tingkat keparahan error di permukaan bernilai tinggi yang sempit pada runner Blacksmith Linux yang lebih kecil. Penjaga pull request-nya sengaja lebih kecil daripada profil terjadwal: PR non-draf hanya menjalankan shard `agent-runtime-boundary`, `config-boundary`, `core-auth-secrets`, `channel-runtime-boundary`, `gateway-runtime-boundary`, `memory-runtime-boundary`, `mcp-process-runtime-boundary`, `provider-runtime-boundary`, `session-diagnostics-boundary`, `plugin-boundary`, `plugin-sdk-package-contract`, dan `plugin-sdk-reply-runtime` yang sepadan untuk perubahan kode eksekusi perintah/model/tool agen dan dispatch balasan, kode skema/migrasi/IO config, kode auth/rahasia/sandbox/keamanan, channel inti dan runtime Plugin channel terbundel, protokol Gateway/metode-server, runtime memori/perekat SDK, MCP/proses/pengiriman keluar, runtime provider/katalog model, diagnostik sesi/antrean pengiriman, loader Plugin, Plugin SDK/kontrak-paket, atau runtime balasan Plugin SDK. Perubahan config CodeQL dan alur kerja kualitas menjalankan semua dua belas shard kualitas PR. +`CodeQL Critical Quality` adalah shard non-keamanan yang sesuai. Ia hanya menjalankan kueri kualitas JavaScript/TypeScript non-keamanan dengan severity error pada permukaan bernilai tinggi yang sempit di runner Blacksmith Linux yang lebih kecil. Penjaga pull request-nya sengaja lebih kecil daripada profil terjadwal: PR non-draf hanya menjalankan shard `agent-runtime-boundary`, `config-boundary`, `core-auth-secrets`, `channel-runtime-boundary`, `gateway-runtime-boundary`, `memory-runtime-boundary`, `mcp-process-runtime-boundary`, `provider-runtime-boundary`, `session-diagnostics-boundary`, `plugin-boundary`, `plugin-sdk-package-contract`, dan `plugin-sdk-reply-runtime` yang sesuai untuk eksekusi perintah/model/tool agent dan kode dispatch balasan, skema config/migration/kode IO, kode auth/secret/sandbox/keamanan, runtime kanal inti dan plugin kanal bawaan, protokol gateway/server-method, runtime memory/glue SDK, MCP/proses/pengiriman keluar, katalog model/runtime provider, diagnostik sesi/antrean pengiriman, loader plugin, kontrak Plugin SDK/paket, atau perubahan runtime balasan Plugin SDK. Perubahan config CodeQL dan workflow kualitas menjalankan semua dua belas shard kualitas PR. Dispatch manual menerima: @@ -437,36 +422,36 @@ Profil sempit adalah hook pengajaran/iterasi untuk menjalankan satu shard kualit | Kategori | Permukaan | | ------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `/codeql-critical-quality/core-auth-secrets` | Kode batas keamanan auth, rahasia, sandbox, Cron, dan Gateway | -| `/codeql-critical-quality/config-boundary` | Skema config, migrasi, normalisasi, dan kontrak IO | +| `/codeql-critical-quality/core-auth-secrets` | Kode batas keamanan auth, secret, sandbox, cron, dan gateway | +| `/codeql-critical-quality/config-boundary` | Skema config, migration, normalisasi, dan kontrak IO | | `/codeql-critical-quality/gateway-runtime-boundary` | Skema protokol Gateway dan kontrak metode server | -| `/codeql-critical-quality/channel-runtime-boundary` | Kontrak implementasi channel inti dan Plugin channel terbundel | +| `/codeql-critical-quality/channel-runtime-boundary` | Kontrak implementasi kanal inti dan plugin kanal bawaan | | `/codeql-critical-quality/agent-runtime-boundary` | Eksekusi perintah, dispatch model/provider, dispatch dan antrean auto-reply, serta kontrak runtime control-plane ACP | -| `/codeql-critical-quality/mcp-process-runtime-boundary` | Server MCP dan bridge tool, helper supervisi proses, serta kontrak pengiriman keluar | -| `/codeql-critical-quality/memory-runtime-boundary` | SDK host memori, fasad runtime memori, alias Plugin SDK memori, perekat aktivasi runtime memori, dan perintah doctor memori | +| `/codeql-critical-quality/mcp-process-runtime-boundary` | Server MCP dan jembatan tool, helper supervisi proses, serta kontrak pengiriman keluar | +| `/codeql-critical-quality/memory-runtime-boundary` | SDK host memory, facade runtime memory, alias Plugin SDK memory, glue aktivasi runtime memory, dan perintah doctor memory | | `/codeql-critical-quality/session-diagnostics-boundary` | Internal antrean balasan, antrean pengiriman sesi, helper binding/pengiriman sesi keluar, permukaan bundle event/log diagnostik, dan kontrak CLI doctor sesi | -| `/codeql-critical-quality/plugin-sdk-reply-runtime` | Dispatch balasan masuk Plugin SDK, helper payload/chunking/runtime balasan, opsi balasan channel, antrean pengiriman, dan helper binding sesi/thread | -| `/codeql-critical-quality/provider-runtime-boundary` | Normalisasi katalog model, auth dan discovery provider, pendaftaran runtime provider, bawaan/katalog provider, serta registry web/search/fetch/embedding | -| `/codeql-critical-quality/ui-control-plane` | Bootstrap UI kontrol, persistensi lokal, alur kontrol Gateway, dan kontrak runtime control-plane tugas | -| `/codeql-critical-quality/web-media-runtime-boundary` | Fetch/search web inti, IO media, pemahaman media, image-generation, dan kontrak runtime media-generation | -| `/codeql-critical-quality/plugin-boundary` | Kontrak loader, registry, permukaan publik, dan entrypoint Plugin SDK | -| `/codeql-critical-quality/plugin-sdk-package-contract` | Sumber Plugin SDK sisi paket yang dipublikasikan dan helper kontrak paket Plugin | +| `/codeql-critical-quality/plugin-sdk-reply-runtime` | Dispatch balasan masuk Plugin SDK, helper payload/chunking/runtime balasan, opsi balasan kanal, antrean pengiriman, dan helper binding sesi/thread | +| `/codeql-critical-quality/provider-runtime-boundary` | Normalisasi katalog model, auth dan discovery provider, registrasi runtime provider, default/katalog provider, serta registry web/search/fetch/embedding | +| `/codeql-critical-quality/ui-control-plane` | Bootstrap UI kontrol, persistensi lokal, alur kontrol gateway, dan kontrak runtime control-plane tugas | +| `/codeql-critical-quality/web-media-runtime-boundary` | Kontrak runtime fetch/search web inti, IO media, pemahaman media, image-generation, dan media-generation | +| `/codeql-critical-quality/plugin-boundary` | Loader, registry, public-surface, dan kontrak entrypoint Plugin SDK | +| `/codeql-critical-quality/plugin-sdk-package-contract` | Sumber Plugin SDK sisi paket yang dipublikasikan dan helper kontrak paket plugin | -Kualitas tetap terpisah dari keamanan agar temuan kualitas dapat dijadwalkan, diukur, dinonaktifkan, atau diperluas tanpa mengaburkan sinyal keamanan. Ekspansi CodeQL Swift, Python, dan Plugin terbundel harus ditambahkan kembali sebagai pekerjaan lanjutan yang terskop atau di-shard hanya setelah profil sempit memiliki runtime dan sinyal yang stabil. +Kualitas tetap terpisah dari keamanan agar temuan kualitas dapat dijadwalkan, diukur, dinonaktifkan, atau diperluas tanpa mengaburkan sinyal keamanan. Ekspansi CodeQL untuk Swift, Python, dan plugin bawaan harus ditambahkan kembali sebagai pekerjaan lanjutan yang terskop atau tershard hanya setelah profil sempit memiliki runtime dan sinyal yang stabil. -## Alur kerja pemeliharaan +## Workflow pemeliharaan ### Docs Agent -Alur kerja `Docs Agent` adalah lane pemeliharaan Codex berbasis event untuk menjaga dokumen yang ada tetap selaras dengan perubahan yang baru saja mendarat. Ini tidak memiliki jadwal murni: run CI push non-bot yang berhasil di `main` dapat memicunya, dan dispatch manual dapat menjalankannya secara langsung. Pemanggilan workflow-run melewati saat `main` sudah bergerak maju atau saat run Docs Agent non-dilewati lain dibuat dalam satu jam terakhir. Saat berjalan, ini meninjau rentang commit dari SHA sumber Docs Agent non-dilewati sebelumnya hingga `main` saat ini, sehingga satu run per jam dapat mencakup semua perubahan main yang terkumpul sejak pass dokumen terakhir. +Workflow `Docs Agent` adalah jalur pemeliharaan Codex berbasis event untuk menjaga docs yang ada tetap selaras dengan perubahan yang baru saja mendarat. Ia tidak memiliki jadwal murni: run CI push non-bot yang berhasil di `main` dapat memicunya, dan dispatch manual dapat menjalankannya langsung. Invokasi workflow-run dilewati ketika `main` sudah bergerak maju atau ketika run Docs Agent non-skipped lain dibuat dalam satu jam terakhir. Saat berjalan, ia meninjau rentang commit dari SHA sumber Docs Agent non-skipped sebelumnya ke `main` saat ini, sehingga satu run per jam dapat mencakup semua perubahan main yang terakumulasi sejak pemeriksaan docs terakhir. ### Test Performance Agent -Alur kerja `Test Performance Agent` adalah lane pemeliharaan Codex berbasis event untuk tes lambat. Ini tidak memiliki jadwal murni: run CI push non-bot yang berhasil di `main` dapat memicunya, tetapi dilewati jika pemanggilan workflow-run lain sudah berjalan atau sedang berjalan pada hari UTC tersebut. Dispatch manual melewati gerbang aktivitas harian itu. Lane ini membangun laporan performa Vitest yang dikelompokkan untuk full-suite, membiarkan Codex hanya membuat perbaikan performa tes kecil yang mempertahankan cakupan alih-alih refactor luas, lalu menjalankan ulang laporan full-suite dan menolak perubahan yang mengurangi jumlah baseline tes yang lulus. Jika baseline memiliki tes yang gagal, Codex hanya boleh memperbaiki kegagalan yang jelas dan laporan full-suite pasca-agen harus lulus sebelum apa pun di-commit. Saat `main` maju sebelum push bot mendarat, lane ini me-rebase patch yang telah divalidasi, menjalankan ulang `pnpm check:changed`, dan mencoba ulang push; patch kedaluwarsa yang konflik dilewati. Ini menggunakan Ubuntu yang di-host GitHub agar action Codex dapat mempertahankan postur keamanan drop-sudo yang sama seperti agen dokumen. +Workflow `Test Performance Agent` adalah jalur pemeliharaan Codex berbasis event untuk test lambat. Ia tidak memiliki jadwal murni: run CI push non-bot yang berhasil di `main` dapat memicunya, tetapi ia melewati jika invokasi workflow-run lain sudah berjalan atau sedang berjalan pada hari UTC tersebut. Dispatch manual melewati gerbang aktivitas harian itu. Jalur ini membangun laporan performa Vitest full-suite yang dikelompokkan, memungkinkan Codex hanya membuat perbaikan performa test kecil yang mempertahankan coverage, bukan refactor luas, lalu menjalankan ulang laporan full-suite dan menolak perubahan yang mengurangi jumlah test baseline yang lulus. Jika baseline memiliki test yang gagal, Codex hanya boleh memperbaiki kegagalan yang jelas dan laporan full-suite setelah agent harus lulus sebelum apa pun di-commit. Saat `main` maju sebelum push bot mendarat, jalur ini melakukan rebase patch yang telah divalidasi, menjalankan ulang `pnpm check:changed`, dan mencoba ulang push; patch basi yang konflik dilewati. Ia menggunakan Ubuntu yang di-host GitHub agar action Codex dapat mempertahankan postur keselamatan drop-sudo yang sama seperti agent docs. ### PR Duplikat Setelah Merge -Alur kerja `Duplicate PRs After Merge` adalah alur kerja maintainer manual untuk pembersihan duplikat pasca-land. Bawaannya adalah dry-run dan hanya menutup PR yang tercantum secara eksplisit saat `apply=true`. Sebelum mengubah GitHub, ini memverifikasi bahwa PR yang mendarat sudah di-merge dan bahwa setiap duplikat memiliki issue rujukan bersama atau hunk perubahan yang tumpang tindih. +Workflow `Duplicate PRs After Merge` adalah workflow maintainer manual untuk pembersihan duplikat pasca-land. Default-nya dry-run dan hanya menutup PR yang dicantumkan eksplisit ketika `apply=true`. Sebelum mengubah GitHub, ia memverifikasi bahwa PR yang mendarat sudah merged dan bahwa setiap duplikat memiliki issue rujukan bersama atau hunk perubahan yang tumpang tindih. ```bash gh workflow run duplicate-after-merge.yml \ @@ -475,29 +460,29 @@ gh workflow run duplicate-after-merge.yml \ -f apply=true ``` -## Gerbang pemeriksaan lokal dan routing perubahan +## Gerbang check lokal dan routing perubahan -Logika changed-lane lokal berada di `scripts/changed-lanes.mjs` dan dieksekusi oleh `scripts/check-changed.mjs`. Gerbang pemeriksaan lokal itu lebih ketat tentang batas arsitektur daripada cakupan platform CI yang luas: +Logika changed-lane lokal berada di `scripts/changed-lanes.mjs` dan dieksekusi oleh `scripts/check-changed.mjs`. Gerbang check lokal itu lebih ketat terhadap batas arsitektur daripada cakupan platform CI yang luas: -- perubahan produksi inti menjalankan typecheck prod inti dan tes inti ditambah lint/penjaga inti; -- perubahan khusus tes inti hanya menjalankan typecheck tes inti ditambah lint inti; -- perubahan produksi ekstensi menjalankan typecheck prod ekstensi dan tes ekstensi ditambah lint ekstensi; -- perubahan khusus tes ekstensi menjalankan typecheck tes ekstensi ditambah lint ekstensi; -- perubahan Plugin SDK publik atau kontrak Plugin meluas ke typecheck ekstensi karena ekstensi bergantung pada kontrak inti tersebut (penyapuan ekstensi Vitest tetap merupakan pekerjaan tes eksplisit); -- bump versi khusus metadata rilis menjalankan pemeriksaan versi/config/dependensi-root tertarget; -- perubahan root/config yang tidak diketahui fail safe ke semua lane pemeriksaan. +- perubahan produksi inti menjalankan typecheck prod inti dan test inti plus lint/guard inti; +- perubahan khusus test inti hanya menjalankan typecheck test inti plus lint inti; +- perubahan produksi ekstensi menjalankan typecheck prod ekstensi dan test ekstensi plus lint ekstensi; +- perubahan khusus test ekstensi menjalankan typecheck test ekstensi plus lint ekstensi; +- perubahan Plugin SDK publik atau kontrak plugin meluas ke typecheck ekstensi karena ekstensi bergantung pada kontrak inti tersebut (penyisiran ekstensi Vitest tetap pekerjaan test eksplisit); +- bump versi khusus metadata rilis menjalankan check versi/config/dependensi-root yang ditargetkan; +- perubahan root/config yang tidak diketahui gagal secara aman ke semua jalur check. -Routing changed-test lokal berada di `scripts/test-projects.test-support.mjs` dan sengaja lebih murah daripada `check:changed`: edit tes langsung menjalankan dirinya sendiri, edit sumber memprioritaskan pemetaan eksplisit, lalu tes saudara dan dependen grafik impor. Config pengiriman group-room bersama adalah salah satu pemetaan eksplisit: perubahan pada config visible-reply grup, mode pengiriman balasan sumber, atau prompt sistem message-tool dirutekan melalui tes balasan inti ditambah regresi pengiriman Discord dan Slack agar perubahan bawaan bersama gagal sebelum push PR pertama. Gunakan `OPENCLAW_TEST_CHANGED_BROAD=1 pnpm test:changed` hanya saat perubahan cukup luas pada harness sehingga set terpetakan murah bukan proxy yang dapat dipercaya. +Routing changed-test lokal berada di `scripts/test-projects.test-support.mjs` dan sengaja lebih murah daripada `check:changed`: edit test langsung menjalankan dirinya sendiri, edit sumber memilih mapping eksplisit, lalu test saudara dan dependen import-graph. Config pengiriman group-room bersama adalah salah satu mapping eksplisit: perubahan pada config balasan terlihat grup, mode pengiriman balasan sumber, atau prompt sistem message-tool diarahkan melalui test balasan inti plus regresi pengiriman Discord dan Slack sehingga perubahan default bersama gagal sebelum push PR pertama. Gunakan `OPENCLAW_TEST_CHANGED_BROAD=1 pnpm test:changed` hanya ketika perubahan cukup luas pada harness sehingga set murah yang dipetakan bukan proxy tepercaya. ## Validasi Testbox -Jalankan Testbox dari root repo dan utamakan box baru yang sudah dihangatkan untuk pembuktian luas. Sebelum memakai gate lambat pada box yang digunakan ulang, kedaluwarsa, atau baru saja melaporkan sinkronisasi yang sangat besar secara tidak terduga, jalankan `pnpm testbox:sanity` di dalam box terlebih dahulu. +Jalankan Testbox dari root repo dan lebih utamakan box baru yang sudah dipanaskan untuk pembuktian luas. Sebelum memakai gate lambat pada box yang digunakan ulang, kedaluwarsa, atau baru saja melaporkan sinkronisasi yang besar secara tak terduga, jalankan `pnpm testbox:sanity` di dalam box terlebih dahulu. -Pemeriksaan sanity gagal cepat ketika file root yang diperlukan seperti `pnpm-lock.yaml` hilang atau ketika `git status --short` menampilkan setidaknya 200 penghapusan terlacak. Itu biasanya berarti status sinkronisasi jarak jauh bukan salinan PR yang dapat dipercaya; hentikan box tersebut dan hangatkan yang baru alih-alih men-debug kegagalan pengujian produk. Untuk PR penghapusan besar yang disengaja, atur `OPENCLAW_TESTBOX_ALLOW_MASS_DELETIONS=1` untuk proses sanity tersebut. +Pemeriksaan sanity gagal cepat saat file root wajib seperti `pnpm-lock.yaml` menghilang atau saat `git status --short` menunjukkan setidaknya 200 penghapusan terlacak. Itu biasanya berarti status sinkronisasi jarak jauh bukan salinan PR yang tepercaya; hentikan box tersebut dan panaskan yang baru alih-alih men-debug kegagalan uji produk. Untuk PR dengan penghapusan besar yang disengaja, setel `OPENCLAW_TESTBOX_ALLOW_MASS_DELETIONS=1` untuk proses sanity tersebut. -`pnpm testbox:run` juga menghentikan pemanggilan CLI Blacksmith lokal yang tetap berada dalam fase sinkronisasi selama lebih dari lima menit tanpa output pascasinkronisasi. Atur `OPENCLAW_TESTBOX_SYNC_TIMEOUT_MS=0` untuk menonaktifkan pelindung tersebut, atau gunakan nilai milidetik yang lebih besar untuk diff lokal yang luar biasa besar. +`pnpm testbox:run` juga menghentikan pemanggilan Blacksmith CLI lokal yang tetap berada dalam fase sinkronisasi selama lebih dari lima menit tanpa keluaran pascasinkronisasi. Setel `OPENCLAW_TESTBOX_SYNC_TIMEOUT_MS=0` untuk menonaktifkan guard tersebut, atau gunakan nilai milidetik yang lebih besar untuk diff lokal yang sangat besar. -Crabbox adalah jalur remote-box kedua milik repo untuk pembuktian Linux ketika Blacksmith tidak tersedia atau ketika kapasitas cloud milik sendiri lebih disukai. Hangatkan box, hidrasi melalui alur kerja proyek, lalu jalankan perintah melalui CLI Crabbox: +Crabbox adalah jalur remote-box kedua milik repo untuk pembuktian Linux saat Blacksmith tidak tersedia atau saat kapasitas cloud milik sendiri lebih disukai. Panaskan sebuah box, hidrasi melalui workflow proyek, lalu jalankan perintah melalui Crabbox CLI: ```bash pnpm crabbox:warmup -- --idle-timeout 90m @@ -506,9 +491,9 @@ pnpm crabbox:run -- --id --shell "OPENCLAW_TESTBOX=1 pnpm check:changed pnpm crabbox:stop -- ``` -`.crabbox.yaml` mengelola default provider, sinkronisasi, dan hidrasi GitHub Actions. File ini mengecualikan `.git` lokal sehingga checkout Actions yang dihidrasi mempertahankan metadata Git jarak jauhnya sendiri alih-alih menyinkronkan remote dan penyimpanan objek lokal milik maintainer, serta mengecualikan artefak runtime/build lokal yang tidak boleh pernah ditransfer. `.github/workflows/crabbox-hydrate.yml` mengelola checkout, penyiapan Node/pnpm, pengambilan `origin/main`, dan serah-terima lingkungan non-rahasia yang kemudian dijadikan sumber oleh perintah `crabbox run --id `. +`.crabbox.yaml` memiliki default provider, sinkronisasi, dan hidrasi GitHub Actions. File tersebut mengecualikan `.git` lokal sehingga checkout Actions yang terhidrasi mempertahankan metadata Git jarak jauhnya sendiri alih-alih menyinkronkan remote dan object store lokal milik maintainer, serta mengecualikan artefak runtime/build lokal yang tidak boleh pernah ditransfer. `.github/workflows/crabbox-hydrate.yml` memiliki checkout, penyiapan Node/pnpm, pengambilan `origin/main`, dan handoff lingkungan non-rahasia yang kemudian di-source oleh perintah `crabbox run --id `. ## Terkait - [Ikhtisar instalasi](/id/install) -- [Kanal pengembangan](/id/install/development-channels) +- [Channel pengembangan](/id/install/development-channels) diff --git a/docs/id/concepts/system-prompt.md b/docs/id/concepts/system-prompt.md index c3dcb215e..e8d9bc4aa 100644 --- a/docs/id/concepts/system-prompt.md +++ b/docs/id/concepts/system-prompt.md @@ -2,152 +2,152 @@ read_when: - Mengedit teks prompt sistem, daftar alat, atau bagian waktu/Heartbeat - Mengubah perilaku bootstrap ruang kerja atau injeksi Skills -summary: Apa isi prompt sistem OpenClaw dan bagaimana prompt tersebut disusun +summary: Apa yang dimuat dalam prompt sistem OpenClaw dan bagaimana prompt tersebut disusun title: Prompt sistem x-i18n: - generated_at: "2026-05-02T22:18:24Z" + generated_at: "2026-05-02T23:39:12Z" model: gpt-5.5 provider: openai - source_hash: 3b8761a8722bb328b937e0832774be7b4e99602ae032c9a255f26843237c110c + source_hash: f8e0234453812c16cf5d273096d335049bf435ca76ade36200caf4bb344624e5 source_path: concepts/system-prompt.md workflow: 16 --- -OpenClaw membuat prompt sistem kustom untuk setiap eksekusi agen. Prompt tersebut **dimiliki OpenClaw** dan tidak menggunakan prompt default pi-coding-agent. +OpenClaw membangun prompt sistem khusus untuk setiap proses agen. Prompt tersebut **dimiliki OpenClaw** dan tidak menggunakan prompt default pi-coding-agent. -Prompt dirangkai oleh OpenClaw dan disuntikkan ke setiap eksekusi agen. +Prompt dirakit oleh OpenClaw dan disuntikkan ke setiap proses agen. -Plugin penyedia dapat menyumbangkan panduan prompt yang sadar cache tanpa mengganti -prompt lengkap milik OpenClaw. Runtime penyedia dapat: +Plugin penyedia dapat menyumbangkan panduan prompt yang sadar-cache tanpa mengganti +seluruh prompt yang dimiliki OpenClaw. Runtime penyedia dapat: - mengganti sekumpulan kecil bagian inti bernama (`interaction_style`, `tool_call_style`, `execution_bias`) - menyuntikkan **prefiks stabil** di atas batas cache prompt - menyuntikkan **sufiks dinamis** di bawah batas cache prompt -Gunakan kontribusi milik penyedia untuk penyesuaian spesifik keluarga model. Pertahankan mutasi prompt lama +Gunakan kontribusi milik penyedia untuk penyetelan khusus keluarga model. Pertahankan mutasi prompt lama `before_prompt_build` untuk kompatibilitas atau perubahan prompt yang benar-benar global, bukan perilaku penyedia normal. Overlay keluarga OpenAI GPT-5 menjaga aturan eksekusi inti tetap kecil dan menambahkan -panduan spesifik model untuk penguncian persona, keluaran ringkas, disiplin alat, -pencarian paralel, cakupan deliverable, verifikasi, konteks yang kurang, dan -kebersihan alat terminal. +panduan khusus model untuk penguncian persona, keluaran ringkas, disiplin alat, +pencarian paralel, cakupan deliverable, verifikasi, konteks yang hilang, dan +higiene alat terminal. ## Struktur Prompt sengaja dibuat ringkas dan menggunakan bagian tetap: -- **Peralatan**: pengingat sumber kebenaran alat terstruktur plus panduan penggunaan alat runtime. -- **Bias Eksekusi**: panduan tindak lanjut ringkas: bertindak dalam giliran pada - permintaan yang dapat ditindaklanjuti, teruskan hingga selesai atau terblokir, pulih dari hasil alat yang lemah, - periksa status yang dapat berubah secara langsung, dan verifikasi sebelum finalisasi. -- **Keamanan**: pengingat guardrail singkat untuk menghindari perilaku mencari kekuasaan atau melewati pengawasan. -- **Skills** (jika tersedia): memberi tahu model cara memuat instruksi skill sesuai kebutuhan. -- **Pembaruan Mandiri OpenClaw**: cara memeriksa config dengan aman menggunakan - `config.schema.lookup`, menambal config dengan `config.patch`, mengganti config lengkap - dengan `config.apply`, dan menjalankan `update.run` hanya atas permintaan pengguna yang eksplisit. +- **Tooling**: pengingat sumber kebenaran structured-tool plus panduan penggunaan alat runtime. +- **Execution Bias**: panduan tindak lanjut ringkas: bertindak dalam giliran pada + permintaan yang dapat ditindaklanjuti, lanjutkan sampai selesai atau terblokir, pulih dari hasil alat + yang lemah, periksa status yang dapat berubah secara langsung, dan verifikasi sebelum finalisasi. +- **Safety**: pengingat guardrail singkat untuk menghindari perilaku mencari kekuasaan atau melewati pengawasan. +- **Skills** (saat tersedia): memberi tahu model cara memuat instruksi skill sesuai kebutuhan. +- **OpenClaw Self-Update**: cara memeriksa konfigurasi dengan aman menggunakan + `config.schema.lookup`, menambal konfigurasi dengan `config.patch`, mengganti seluruh + konfigurasi dengan `config.apply`, dan menjalankan `update.run` hanya atas permintaan eksplisit pengguna. Alat khusus pemilik `gateway` juga menolak menulis ulang `tools.exec.ask` / `tools.exec.security`, termasuk alias lama `tools.bash.*` yang dinormalisasi ke jalur exec terlindungi tersebut. - **Workspace**: direktori kerja (`agents.defaults.workspace`). -- **Dokumentasi**: jalur lokal ke dokumentasi OpenClaw (repo atau paket npm) dan kapan membacanya. -- **File Workspace (disuntikkan)**: menunjukkan file bootstrap disertakan di bawah. -- **Sandbox** (jika diaktifkan): menunjukkan runtime sandbox, jalur sandbox, dan apakah exec dengan elevasi tersedia. -- **Tanggal & Waktu Saat Ini**: waktu lokal pengguna, zona waktu, dan format waktu. -- **Tag Balasan**: sintaks tag balasan opsional untuk penyedia yang didukung. -- **Heartbeat**: prompt Heartbeat dan perilaku ack, saat Heartbeat diaktifkan untuk agen default. -- **Runtime**: host, OS, node, model, root repo (jika terdeteksi), tingkat pemikiran (satu baris). -- **Penalaran**: tingkat visibilitas saat ini + petunjuk toggle /reasoning. +- **Documentation**: jalur lokal ke dokumentasi OpenClaw (repo atau paket npm) dan kapan membacanya. +- **Workspace Files (injected)**: menunjukkan file bootstrap disertakan di bawah. +- **Sandbox** (saat diaktifkan): menunjukkan runtime sandbox, jalur sandbox, dan apakah exec dengan elevasi tersedia. +- **Current Date & Time**: waktu lokal pengguna, zona waktu, dan format waktu. +- **Reply Tags**: sintaks tag balasan opsional untuk penyedia yang didukung. +- **Heartbeats**: prompt heartbeat dan perilaku ack, saat heartbeat diaktifkan untuk agen default. +- **Runtime**: host, OS, node, model, root repo (saat terdeteksi), tingkat berpikir (satu baris). +- **Reasoning**: tingkat visibilitas saat ini + petunjuk toggle /reasoning. -OpenClaw menjaga konten stabil besar, termasuk **Konteks Proyek**, di atas +OpenClaw menjaga konten stabil besar, termasuk **Project Context**, di atas batas cache prompt internal. Bagian channel/sesi yang volatil seperti -panduan sematan Control UI, **Pesan**, **Suara**, **Konteks Chat Grup**, -**Reaksi**, **Heartbeat**, dan **Runtime** ditambahkan di bawah batas tersebut +panduan embed Control UI, **Messaging**, **Voice**, **Group Chat Context**, +**Reactions**, **Heartbeats**, dan **Runtime** ditambahkan di bawah batas tersebut agar backend lokal dengan cache prefiks dapat menggunakan kembali prefiks workspace yang stabil -di seluruh giliran channel. Deskripsi alat juga sebaiknya menghindari penyematan nama +di seluruh giliran channel. Deskripsi alat juga harus menghindari penyematan nama channel saat ini ketika skema yang diterima sudah membawa detail runtime tersebut. -Bagian Peralatan juga menyertakan panduan runtime untuk pekerjaan yang berjalan lama: +Bagian Tooling juga menyertakan panduan runtime untuk pekerjaan jangka panjang: -- gunakan cron untuk tindak lanjut di masa mendatang (`check back later`, pengingat, pekerjaan berulang) - alih-alih loop tidur `exec`, trik penundaan `yieldMs`, atau polling `process` +- gunakan cron untuk tindak lanjut di masa depan (`check back later`, pengingat, pekerjaan berulang) + alih-alih loop sleep `exec`, trik penundaan `yieldMs`, atau polling `process` berulang - gunakan `exec` / `process` hanya untuk perintah yang dimulai sekarang dan terus berjalan di latar belakang -- saat wake penyelesaian otomatis diaktifkan, mulai perintah sekali dan andalkan - jalur wake berbasis push saat mengeluarkan output atau gagal +- saat bangun otomatis saat selesai diaktifkan, mulai perintah sekali dan andalkan + jalur bangun berbasis push saat ia memancarkan output atau gagal - gunakan `process` untuk log, status, input, atau intervensi saat Anda perlu memeriksa perintah yang sedang berjalan -- jika tugas lebih besar, lebih baik gunakan `sessions_spawn`; penyelesaian sub-agen - berbasis push dan otomatis mengumumkan kembali ke peminta -- jangan melakukan polling `subagents list` / `sessions_list` dalam loop hanya untuk menunggu +- jika tugas lebih besar, prioritaskan `sessions_spawn`; penyelesaian sub-agen bersifat + berbasis push dan otomatis mengumumkan kembali kepada peminta +- jangan polling `subagents list` / `sessions_list` dalam loop hanya untuk menunggu penyelesaian -Saat alat eksperimental `update_plan` diaktifkan, Peralatan juga memberi tahu +Saat alat eksperimental `update_plan` diaktifkan, Tooling juga memberi tahu model untuk menggunakannya hanya untuk pekerjaan multi-langkah yang tidak sepele, menjaga tepat satu langkah `in_progress`, dan menghindari pengulangan seluruh rencana setelah setiap pembaruan. -Guardrail keamanan dalam prompt sistem bersifat nasihat. Guardrail ini memandu perilaku model tetapi tidak menegakkan kebijakan. Gunakan kebijakan alat, persetujuan exec, sandboxing, dan allowlist channel untuk penegakan keras; operator dapat menonaktifkannya sesuai desain. +Guardrail keamanan dalam prompt sistem bersifat saran. Guardrail tersebut memandu perilaku model tetapi tidak menegakkan kebijakan. Gunakan kebijakan alat, persetujuan exec, sandboxing, dan allowlist channel untuk penegakan keras; operator dapat menonaktifkannya sesuai desain. Pada channel dengan kartu/tombol persetujuan native, prompt runtime kini memberi tahu -agen untuk mengandalkan UI persetujuan native tersebut terlebih dahulu. Agen sebaiknya hanya menyertakan perintah manual +agen untuk mengandalkan UI persetujuan native tersebut terlebih dahulu. Agen hanya boleh menyertakan perintah manual `/approve` saat hasil alat mengatakan persetujuan chat tidak tersedia atau persetujuan manual adalah satu-satunya jalur. ## Mode prompt OpenClaw dapat merender prompt sistem yang lebih kecil untuk sub-agen. Runtime menetapkan -`promptMode` untuk setiap eksekusi (bukan config yang ditampilkan kepada pengguna): +`promptMode` untuk setiap proses (bukan konfigurasi yang menghadap pengguna): - `full` (default): menyertakan semua bagian di atas. -- `minimal`: digunakan untuk sub-agen; menghilangkan **Skills**, **Pemanggilan Memori**, **Pembaruan Mandiri OpenClaw**, - **Alias Model**, **Identitas Pengguna**, **Tag Balasan**, - **Pesan**, **Balasan Senyap**, dan **Heartbeat**. Peralatan, **Keamanan**, - Workspace, Sandbox, Tanggal & Waktu Saat Ini (jika diketahui), Runtime, dan konteks yang disuntikkan - tetap tersedia. +- `minimal`: digunakan untuk sub-agen; menghilangkan **Skills**, **Memory Recall**, **OpenClaw + Self-Update**, **Model Aliases**, **User Identity**, **Reply Tags**, + **Messaging**, **Silent Replies**, dan **Heartbeats**. Tooling, **Safety**, + Workspace, Sandbox, Current Date & Time (saat diketahui), Runtime, dan konteks + yang disuntikkan tetap tersedia. - `none`: hanya mengembalikan baris identitas dasar. -Saat `promptMode=minimal`, prompt tambahan yang disuntikkan diberi label **Konteks Subagen** -alih-alih **Konteks Chat Grup**. +Saat `promptMode=minimal`, prompt tambahan yang disuntikkan diberi label **Subagent +Context**, bukan **Group Chat Context**. -Untuk eksekusi balasan otomatis channel, OpenClaw dapat menghilangkan bagian **Balasan Senyap** +Untuk proses balasan otomatis channel, OpenClaw dapat menghilangkan bagian **Silent Replies** generik saat konteks chat langsung/grup sudah menyertakan perilaku -`NO_REPLY` spesifik percakapan yang telah di-resolve. Ini menghindari pengulangan mekanika token -di prompt sistem global dan konteks channel sekaligus. +`NO_REPLY` khusus percakapan yang telah diselesaikan. Ini menghindari pengulangan mekanika token +baik di prompt sistem global maupun konteks channel. ## Snapshot prompt -OpenClaw menyimpan snapshot prompt jalur sukses yang sudah dikomit untuk runtime -Codex/alat pesan di bawah `test/fixtures/agents/prompt-snapshots/happy-path/`. Snapshot tersebut merender -parameter thread/giliran app-server terpilih plus stack lapisan prompt terikat model yang direkonstruksi -untuk giliran Telegram langsung, grup Discord, dan Heartbeat. Stack tersebut -menyertakan fixture prompt model Codex `gpt-5.5` yang dipin dan dihasilkan dari bentuk -katalog/cache model Codex, teks developer izin jalur sukses Codex, -instruksi developer OpenClaw, input giliran pengguna, dan referensi ke spesifikasi -alat dinamis. +OpenClaw menyimpan snapshot prompt yang di-commit untuk jalur bahagia runtime Codex di bawah +`test/fixtures/agents/prompt-snapshots/codex-runtime-happy-path/`. Snapshot ini merender +parameter thread/giliran app-server terpilih plus stack lapisan prompt terikat model +yang direkonstruksi untuk giliran langsung Telegram, grup Discord, dan heartbeat. Stack tersebut +mencakup fixture prompt model Codex `gpt-5.5` yang dipin dan dihasilkan dari bentuk +katalog/cache model Codex, teks developer izin jalur bahagia Codex, +instruksi developer OpenClaw, input giliran pengguna, dan referensi ke spesifikasi alat +dinamis. -Refresh fixture prompt model Codex yang dipin dengan +Segarkan fixture prompt model Codex yang dipin dengan `pnpm prompt:snapshots:sync-codex-model`. Secara default, skrip mencari cache runtime Codex di `$CODEX_HOME/models_cache.json`, lalu `~/.codex/models_cache.json`, dan baru kemudian fallback ke konvensi checkout Codex maintainer di `~/code/codex/codex-rs/models-manager/models.json`. Jika -tidak ada sumber tersebut, perintah keluar tanpa mengubah fixture yang dikomit. -Berikan `--catalog ` untuk me-refresh dari file `models_cache.json` +tidak ada sumber tersebut, perintah keluar tanpa mengubah fixture yang di-commit. +Berikan `--catalog ` untuk menyegarkan dari file `models_cache.json` atau `models.json` tertentu. -Snapshot ini masih bukan tangkapan request OpenAI mentah byte demi byte. Codex +Snapshot ini masih bukan tangkapan permintaan OpenAI mentah byte-demi-byte. Codex dapat menambahkan konteks workspace milik runtime seperti `AGENTS.md`, konteks -environment, memori, instruksi app/plugin, dan instruksi mode kolaborasi masa depan +lingkungan, memori, instruksi app/plugin, dan instruksi mode kolaborasi masa depan di dalam runtime Codex setelah OpenClaw mengirim parameter thread dan giliran. -Regenerasi dengan `pnpm prompt:snapshots:gen` dan verifikasi drift dengan -`pnpm prompt:snapshots:check`. CI menjalankan pemeriksaan drift di shard -batas tambahan agar perubahan prompt dan pembaruan snapshot tetap melekat pada PR yang sama. +Regenerasikan dengan `pnpm prompt:snapshots:gen` dan verifikasi drift dengan +`pnpm prompt:snapshots:check`. CI menjalankan pemeriksaan drift di shard batas +tambahan agar perubahan prompt dan pembaruan snapshot tetap melekat pada PR yang sama. -## Injeksi bootstrap workspace +## Penyuntikan bootstrap workspace -File bootstrap dipangkas dan ditambahkan di bawah **Konteks Proyek** agar model melihat konteks identitas dan profil tanpa perlu membaca eksplisit: +File bootstrap dipangkas dan ditambahkan di bawah **Project Context** agar model melihat konteks identitas dan profil tanpa perlu pembacaan eksplisit: - `AGENTS.md` - `SOUL.md` @@ -155,47 +155,54 @@ File bootstrap dipangkas dan ditambahkan di bawah **Konteks Proyek** agar model - `IDENTITY.md` - `USER.md` - `HEARTBEAT.md` -- `BOOTSTRAP.md` (hanya pada workspace baru) -- `MEMORY.md` jika ada +- `BOOTSTRAP.md` (hanya pada workspace yang benar-benar baru) +- `MEMORY.md` saat ada Semua file ini **disuntikkan ke jendela konteks** pada setiap giliran kecuali -gate spesifik file berlaku. `HEARTBEAT.md` dihilangkan pada eksekusi normal saat -Heartbeat dinonaktifkan untuk agen default atau -`agents.defaults.heartbeat.includeSystemPromptSection` bernilai false. Jaga file yang disuntikkan -tetap ringkas — terutama `MEMORY.md`, yang dapat bertambah seiring waktu dan menyebabkan -penggunaan konteks yang sangat tinggi secara tak terduga serta Compaction yang lebih sering. +gate khusus file berlaku. `HEARTBEAT.md` dihilangkan pada proses normal saat +heartbeat dinonaktifkan untuk agen default atau +`agents.defaults.heartbeat.includeSystemPromptSection` bernilai false. Jaga file +yang disuntikkan tetap ringkas — terutama `MEMORY.md`, yang dapat bertambah seiring waktu dan menyebabkan +penggunaan konteks yang sangat tinggi secara tidak terduga serta Compaction yang lebih sering. + +Saat sesi berjalan pada harness Codex native, Codex memuat `AGENTS.md` +melalui penemuan dokumen proyeknya sendiri. OpenClaw tetap menyelesaikan file +bootstrap lainnya dan meneruskannya sebagai instruksi konfigurasi Codex, sehingga `SOUL.md`, +`TOOLS.md`, `IDENTITY.md`, `USER.md`, `HEARTBEAT.md`, `BOOTSTRAP.md`, dan +`MEMORY.md` mempertahankan peran konteks workspace yang sama tanpa menduplikasi +`AGENTS.md`. -File harian `memory/*.md` **bukan** bagian dari Konteks Proyek bootstrap normal. Pada giliran biasa, file tersebut diakses sesuai kebutuhan melalui alat `memory_search` dan `memory_get`, sehingga tidak dihitung terhadap jendela konteks kecuali model membacanya secara eksplisit. Giliran `/new` dan `/reset` polos adalah pengecualian: runtime dapat menambahkan memori harian terbaru di awal sebagai blok konteks startup sekali pakai untuk giliran pertama tersebut. +File harian `memory/*.md` **bukan** bagian dari Project Context bootstrap normal. Pada giliran biasa, file tersebut diakses sesuai kebutuhan melalui alat `memory_search` dan `memory_get`, sehingga tidak dihitung terhadap jendela konteks kecuali model secara eksplisit membacanya. Giliran `/new` dan `/reset` kosong adalah pengecualian: runtime dapat menambahkan memori harian terbaru di awal sebagai blok konteks startup sekali pakai untuk giliran pertama tersebut. -File besar dipotong dengan marker. Ukuran maksimum per file dikendalikan oleh -`agents.defaults.bootstrapMaxChars` (default: 12000). Total konten bootstrap yang disuntikkan -di seluruh file dibatasi oleh `agents.defaults.bootstrapTotalMaxChars` -(default: 60000). File yang hilang menyuntikkan marker singkat file hilang. Saat pemotongan -terjadi, OpenClaw dapat menyuntikkan blok peringatan dalam Konteks Proyek; kendalikan ini dengan +File besar dipotong dengan penanda. Ukuran maksimum per file dikendalikan oleh +`agents.defaults.bootstrapMaxChars` (default: 12000). Total konten bootstrap +yang disuntikkan di seluruh file dibatasi oleh `agents.defaults.bootstrapTotalMaxChars` +(default: 60000). File yang hilang menyuntikkan penanda file hilang singkat. Saat pemotongan +terjadi, OpenClaw dapat menyuntikkan blok peringatan dalam Project Context; kendalikan ini dengan `agents.defaults.bootstrapPromptTruncationWarning` (`off`, `once`, `always`; default: `once`). Sesi sub-agen hanya menyuntikkan `AGENTS.md` dan `TOOLS.md` (file bootstrap lain difilter keluar untuk menjaga konteks sub-agen tetap kecil). -Hook internal dapat mengintersepsi langkah ini melalui `agent:bootstrap` untuk memutasi atau mengganti +Hook internal dapat mencegat langkah ini melalui `agent:bootstrap` untuk mengubah atau mengganti file bootstrap yang disuntikkan (misalnya menukar `SOUL.md` dengan persona alternatif). -Jika Anda ingin membuat agen terdengar lebih tidak generik, mulai dengan +Jika Anda ingin membuat agen terdengar kurang generik, mulai dengan [Panduan Kepribadian SOUL.md](/id/concepts/soul). Untuk memeriksa seberapa besar kontribusi setiap file yang disuntikkan (mentah vs disuntikkan, pemotongan, plus overhead skema alat), gunakan `/context list` atau `/context detail`. Lihat [Konteks](/id/concepts/context). ## Penanganan waktu -Prompt sistem menyertakan bagian khusus **Tanggal & Waktu Saat Ini** saat -zona waktu pengguna diketahui. Untuk menjaga cache prompt tetap stabil, kini bagian ini hanya menyertakan +Prompt sistem menyertakan bagian khusus **Current Date & Time** saat +zona waktu pengguna diketahui. Agar cache prompt tetap stabil, kini bagian ini hanya menyertakan **zona waktu** (tanpa jam dinamis atau format waktu). -Gunakan `session_status` saat agen memerlukan waktu saat ini; kartu status -menyertakan baris timestamp. Alat yang sama juga dapat secara opsional menetapkan override model per sesi +Gunakan `session_status` saat agen membutuhkan waktu saat ini; kartu status +menyertakan baris timestamp. Alat yang sama dapat secara opsional menetapkan override model per sesi (`model=default` menghapusnya). Konfigurasikan dengan: @@ -207,18 +214,18 @@ Lihat [Tanggal & Waktu](/id/date-time) untuk detail perilaku lengkap. ## Skills -Saat skill yang memenuhi syarat ada, OpenClaw menyuntikkan **daftar skills yang tersedia** yang ringkas -(`formatSkillsForPrompt`) yang menyertakan **jalur file** untuk setiap skill. Prompt +Saat skill yang memenuhi syarat ada, OpenClaw menyuntikkan **daftar skills tersedia** +yang ringkas (`formatSkillsForPrompt`) yang menyertakan **jalur file** untuk setiap skill. Prompt menginstruksikan model untuk menggunakan `read` guna memuat SKILL.md di lokasi yang tercantum -(workspace, terkelola, atau bundled). Jika tidak ada skill yang memenuhi syarat, bagian +(workspace, terkelola, atau dibundel). Jika tidak ada skill yang memenuhi syarat, bagian Skills dihilangkan. -Kelayakan mencakup gate metadata skill, pemeriksaan environment/config runtime, +Kelayakan mencakup gate metadata skill, pemeriksaan lingkungan/konfigurasi runtime, dan allowlist skill agen efektif saat `agents.defaults.skills` atau `agents.list[].skills` dikonfigurasi. -Skill yang dibundel Plugin memenuhi syarat hanya saat plugin pemiliknya diaktifkan. -Ini memungkinkan plugin alat mengekspos panduan operasi yang lebih dalam tanpa menyematkan semua +Skill yang dibundel Plugin hanya memenuhi syarat saat Plugin pemiliknya diaktifkan. +Ini memungkinkan Plugin alat mengekspos panduan operasi yang lebih mendalam tanpa menyematkan seluruh panduan tersebut langsung di setiap deskripsi alat. ``` @@ -238,22 +245,21 @@ Anggaran daftar skills dimiliki oleh subsistem skills: - Default global: `skills.limits.maxSkillsPromptChars` - Override per agen: `agents.list[].skillsLimits.maxSkillsPromptChars` -Kutipan runtime terbatas generik menggunakan permukaan berbeda: +Kutipan runtime berbatas generik menggunakan surface yang berbeda: - `agents.defaults.contextLimits.*` - `agents.list[].contextLimits.*` -Pemisahan tersebut menjaga ukuran skills terpisah dari ukuran pembacaan/injeksi runtime seperti -`memory_get`, hasil alat langsung, dan refresh AGENTS.md pasca-Compaction. +Pemisahan itu menjaga ukuran Skills tetap terpisah dari ukuran pembacaan/injeksi runtime seperti `memory_get`, hasil tool langsung, dan penyegaran AGENTS.md pasca-Compaction. ## Dokumentasi -Prompt sistem menyertakan bagian **Dokumentasi**. Saat dokumentasi lokal tersedia, bagian tersebut mengarah ke direktori dokumentasi OpenClaw lokal (`docs/` dalam checkout Git atau dokumentasi paket npm yang dibundel). Jika dokumentasi lokal tidak tersedia, bagian tersebut menggunakan cadangan [https://docs.openclaw.ai](https://docs.openclaw.ai). +Prompt sistem menyertakan bagian **Dokumentasi**. Saat dokumentasi lokal tersedia, bagian ini mengarah ke direktori dokumentasi OpenClaw lokal (`docs/` dalam checkout Git atau dokumentasi paket npm yang dibundel). Jika dokumentasi lokal tidak tersedia, bagian ini kembali ke [https://docs.openclaw.ai](https://docs.openclaw.ai). -Bagian yang sama juga menyertakan lokasi sumber OpenClaw. Checkout Git mengekspos root sumber lokal agar agen dapat memeriksa kode secara langsung. Instalasi paket menyertakan URL sumber GitHub dan memberi tahu agen untuk meninjau sumber di sana kapan pun dokumentasi tidak lengkap atau sudah usang. Prompt tersebut juga mencatat cermin dokumentasi publik, Discord komunitas, dan ClawHub ([https://clawhub.ai](https://clawhub.ai)) untuk penemuan Skills. Prompt tersebut memberi tahu model untuk membaca dokumentasi terlebih dahulu untuk perilaku, perintah, konfigurasi, atau arsitektur OpenClaw, dan untuk menjalankan `openclaw status` sendiri bila memungkinkan (meminta pengguna hanya saat tidak memiliki akses). Khusus untuk konfigurasi, prompt tersebut mengarahkan agen ke tindakan alat `gateway` `config.schema.lookup` untuk dokumentasi dan batasan tingkat bidang yang tepat, lalu ke `docs/gateway/configuration.md` dan `docs/gateway/configuration-reference.md` untuk panduan yang lebih luas. +Bagian yang sama juga menyertakan lokasi sumber OpenClaw. Checkout Git mengekspos root sumber lokal sehingga agen dapat memeriksa kode secara langsung. Instalasi paket menyertakan URL sumber GitHub dan memberi tahu agen untuk meninjau sumber di sana kapan pun dokumentasi tidak lengkap atau usang. Prompt ini juga mencatat mirror dokumentasi publik, Discord komunitas, dan ClawHub ([https://clawhub.ai](https://clawhub.ai)) untuk penemuan Skills. Prompt ini memberi tahu model untuk berkonsultasi dengan dokumentasi terlebih dahulu terkait perilaku, perintah, konfigurasi, atau arsitektur OpenClaw, dan untuk menjalankan `openclaw status` sendiri jika memungkinkan (hanya meminta pengguna saat tidak memiliki akses). Khusus untuk konfigurasi, prompt ini mengarahkan agen ke tindakan tool `gateway` `config.schema.lookup` untuk dokumentasi dan batasan tingkat bidang yang tepat, lalu ke `docs/gateway/configuration.md` dan `docs/gateway/configuration-reference.md` untuk panduan yang lebih luas. ## Terkait - [Runtime agen](/id/concepts/agent) -- [Ruang kerja agen](/id/concepts/agent-workspace) +- [Workspace agen](/id/concepts/agent-workspace) - [Mesin konteks](/id/concepts/context-engine) diff --git a/docs/id/nodes/audio.md b/docs/id/nodes/audio.md index f848e91a9..5888ab4f2 100644 --- a/docs/id/nodes/audio.md +++ b/docs/id/nodes/audio.md @@ -1,13 +1,13 @@ --- read_when: - Mengubah transkripsi audio atau penanganan media -summary: Cara audio/catatan suara masuk diunduh, ditranskripsikan, dan disisipkan ke dalam balasan +summary: Cara audio/catatan suara yang masuk diunduh, ditranskripsi, dan disisipkan ke dalam balasan title: Audio dan catatan suara x-i18n: - generated_at: "2026-04-30T09:57:37Z" + generated_at: "2026-05-02T23:39:00Z" model: gpt-5.5 provider: openai - source_hash: 35074d79104f767ee252064462202a8ec21ac26f6db25c39e67f31f6b40edeb7 + source_hash: 91cd6951f80c6137061a7d4e82415b0872bc92c6d6ad136273a2e9ad7ec00ac1 source_path: nodes/audio.md workflow: 16 --- @@ -17,36 +17,37 @@ x-i18n: ## Yang berfungsi - **Pemahaman media (audio)**: Jika pemahaman audio diaktifkan (atau terdeteksi otomatis), OpenClaw: - 1. Menemukan lampiran audio pertama (path lokal atau URL) dan mengunduhnya jika diperlukan. + 1. Menemukan lampiran audio pertama (path lokal atau URL) dan mengunduhnya jika perlu. 2. Menerapkan `maxBytes` sebelum mengirim ke setiap entri model. - 3. Menjalankan entri model pertama yang memenuhi syarat secara berurutan (penyedia atau CLI). - 4. Jika gagal atau dilewati (ukuran/timeout), ia mencoba entri berikutnya. - 5. Saat berhasil, ia mengganti `Body` dengan blok `[Audio]` dan menetapkan `{{Transcript}}`. -- **Penguraian perintah**: Saat transkripsi berhasil, `CommandBody`/`RawBody` ditetapkan ke transkrip sehingga perintah garis miring tetap berfungsi. -- **Logging verbose**: Dalam `--verbose`, kami mencatat saat transkripsi berjalan dan saat transkripsi mengganti isi body. + 3. Menjalankan entri model pertama yang memenuhi syarat secara berurutan (provider atau CLI). + 4. Jika gagal atau dilewati (ukuran/timeout), OpenClaw mencoba entri berikutnya. + 5. Jika berhasil, OpenClaw mengganti `Body` dengan blok `[Audio]` dan menetapkan `{{Transcript}}`. +- **Penguraian perintah**: Saat transkripsi berhasil, `CommandBody`/`RawBody` ditetapkan ke transkrip sehingga perintah slash tetap berfungsi. +- **Logging verbose**: Dalam `--verbose`, kami mencatat saat transkripsi berjalan dan saat transkripsi mengganti body. +- **Dikte Control UI**: Penyusun Chat dapat mengirim klip mikrofon yang direkam browser ke `chat.transcribeAudio`. RPC Gateway tersebut menulis klip ke file lokal sementara, menjalankan pipeline transkripsi audio yang sama, mengembalikan teks draf ke browser, dan menghapus file sementara. Ini tidak membuat run agen dengan sendirinya. -## Deteksi otomatis (bawaan) +## Deteksi otomatis (default) -Jika Anda **tidak mengonfigurasi model** dan `tools.media.audio.enabled` **tidak** disetel ke `false`, +Jika Anda **tidak mengonfigurasi model** dan `tools.media.audio.enabled` **tidak** diatur ke `false`, OpenClaw mendeteksi otomatis dalam urutan ini dan berhenti pada opsi pertama yang berfungsi: -1. **Model balasan aktif** saat penyedianya mendukung pemahaman audio. -2. **CLI lokal** (jika terpasang) +1. **Model balasan aktif** saat provider-nya mendukung pemahaman audio. +2. **CLI lokal** (jika terinstal) - `sherpa-onnx-offline` (memerlukan `SHERPA_ONNX_MODEL_DIR` dengan encoder/decoder/joiner/tokens) - `whisper-cli` (dari `whisper-cpp`; menggunakan `WHISPER_CPP_MODEL` atau model tiny bawaan) - `whisper` (CLI Python; mengunduh model secara otomatis) -3. **Gemini CLI** (`gemini`) menggunakan `read_many_files` -4. **Auth penyedia** +3. **CLI Gemini** (`gemini`) menggunakan `read_many_files` +4. **Autentikasi provider** - Entri `models.providers.*` yang dikonfigurasi dan mendukung audio dicoba terlebih dahulu - Urutan fallback bawaan: OpenAI → Groq → xAI → Deepgram → Google → SenseAudio → ElevenLabs → Mistral -Untuk menonaktifkan deteksi otomatis, setel `tools.media.audio.enabled: false`. -Untuk menyesuaikan, setel `tools.media.audio.models`. -Catatan: Deteksi binary bersifat upaya terbaik di macOS/Linux/Windows; pastikan CLI ada di `PATH` (kami memperluas `~`), atau setel model CLI eksplisit dengan path perintah lengkap. +Untuk menonaktifkan deteksi otomatis, atur `tools.media.audio.enabled: false`. +Untuk menyesuaikan, atur `tools.media.audio.models`. +Catatan: Deteksi biner bersifat upaya terbaik di macOS/Linux/Windows; pastikan CLI ada di `PATH` (kami memperluas `~`), atau atur model CLI eksplisit dengan path perintah lengkap. ## Contoh konfigurasi -### Fallback penyedia + CLI (OpenAI + Whisper CLI) +### Fallback provider + CLI (OpenAI + Whisper CLI) ```json5 { @@ -70,7 +71,7 @@ Catatan: Deteksi binary bersifat upaya terbaik di macOS/Linux/Windows; pastikan } ``` -### Khusus penyedia dengan pembatasan scope +### Hanya provider dengan pembatasan cakupan ```json5 { @@ -89,7 +90,7 @@ Catatan: Deteksi binary bersifat upaya terbaik di macOS/Linux/Windows; pastikan } ``` -### Khusus penyedia (Deepgram) +### Hanya provider (Deepgram) ```json5 { @@ -104,7 +105,7 @@ Catatan: Deteksi binary bersifat upaya terbaik di macOS/Linux/Windows; pastikan } ``` -### Khusus penyedia (Mistral Voxtral) +### Hanya provider (Mistral Voxtral) ```json5 { @@ -119,7 +120,7 @@ Catatan: Deteksi binary bersifat upaya terbaik di macOS/Linux/Windows; pastikan } ``` -### Khusus penyedia (SenseAudio) +### Hanya provider (SenseAudio) ```json5 { @@ -134,7 +135,7 @@ Catatan: Deteksi binary bersifat upaya terbaik di macOS/Linux/Windows; pastikan } ``` -### Gema transkrip ke chat (ikut serta) +### Gema transkrip ke chat (opt-in) ```json5 { @@ -153,28 +154,28 @@ Catatan: Deteksi binary bersifat upaya terbaik di macOS/Linux/Windows; pastikan ## Catatan & batasan -- Auth penyedia mengikuti urutan auth model standar (profil auth, env vars, `models.providers.*.apiKey`). +- Autentikasi provider mengikuti urutan autentikasi model standar (profil autentikasi, env vars, `models.providers.*.apiKey`). - Detail penyiapan Groq: [Groq](/id/providers/groq). - Deepgram mengambil `DEEPGRAM_API_KEY` saat `provider: "deepgram"` digunakan. - Detail penyiapan Deepgram: [Deepgram (transkripsi audio)](/id/providers/deepgram). - Detail penyiapan Mistral: [Mistral](/id/providers/mistral). - SenseAudio mengambil `SENSEAUDIO_API_KEY` saat `provider: "senseaudio"` digunakan. - Detail penyiapan SenseAudio: [SenseAudio](/id/providers/senseaudio). -- Penyedia audio dapat mengganti `baseUrl`, `headers`, dan `providerOptions` melalui `tools.media.audio`. -- Batas ukuran bawaan adalah 20MB (`tools.media.audio.maxBytes`). Audio yang terlalu besar dilewati untuk model tersebut dan entri berikutnya dicoba. -- File audio tiny/kosong di bawah 1024 byte dilewati sebelum transkripsi penyedia/CLI. -- `maxChars` bawaan untuk audio **tidak disetel** (transkrip lengkap). Setel `tools.media.audio.maxChars` atau `maxChars` per entri untuk memangkas output. -- Default otomatis OpenAI adalah `gpt-4o-mini-transcribe`; setel `model: "gpt-4o-transcribe"` untuk akurasi lebih tinggi. +- Provider audio dapat menimpa `baseUrl`, `headers`, dan `providerOptions` melalui `tools.media.audio`. +- Batas ukuran default adalah 20MB (`tools.media.audio.maxBytes`). Audio yang terlalu besar dilewati untuk model tersebut dan entri berikutnya dicoba. +- File audio tiny/kosong di bawah 1024 byte dilewati sebelum transkripsi provider/CLI. +- `maxChars` default untuk audio **tidak diatur** (transkrip penuh). Atur `tools.media.audio.maxChars` atau `maxChars` per entri untuk memangkas output. +- Default otomatis OpenAI adalah `gpt-4o-mini-transcribe`; atur `model: "gpt-4o-transcribe"` untuk akurasi lebih tinggi. - Gunakan `tools.media.audio.attachments` untuk memproses beberapa catatan suara (`mode: "all"` + `maxAttachments`). - Transkrip tersedia untuk templat sebagai `{{Transcript}}`. -- `tools.media.audio.echoTranscript` nonaktif secara bawaan; aktifkan untuk mengirim konfirmasi transkrip kembali ke chat asal sebelum pemrosesan agen. +- `tools.media.audio.echoTranscript` nonaktif secara default; aktifkan untuk mengirim konfirmasi transkrip kembali ke chat asal sebelum pemrosesan agen. - `tools.media.audio.echoFormat` menyesuaikan teks gema (placeholder: `{transcript}`). -- stdout CLI dibatasi (5MB); jaga output CLI tetap ringkas. -- `args` CLI harus menggunakan `{{MediaPath}}` untuk path file audio lokal. Jalankan `openclaw doctor --fix` untuk memigrasikan placeholder `{input}` yang tidak digunakan lagi dari konfigurasi `audio.transcription.command` lama. +- stdout CLI dibatasi (5MB); jaga agar output CLI tetap ringkas. +- `args` CLI sebaiknya menggunakan `{{MediaPath}}` untuk path file audio lokal. Jalankan `openclaw doctor --fix` untuk memigrasikan placeholder `{input}` yang sudah usang dari konfigurasi `audio.transcription.command` lama. -### Dukungan environment proxy +### Dukungan lingkungan proxy -Transkripsi audio berbasis penyedia menghormati env vars proxy outbound standar: +Transkripsi audio berbasis provider mematuhi env vars proxy outbound standar: - `HTTPS_PROXY` - `HTTP_PROXY` @@ -183,11 +184,11 @@ Transkripsi audio berbasis penyedia menghormati env vars proxy outbound standar: - `http_proxy` - `all_proxy` -Jika tidak ada env vars proxy yang disetel, egress langsung digunakan. Jika konfigurasi proxy tidak valid, OpenClaw mencatat peringatan dan kembali ke fetch langsung. +Jika tidak ada env vars proxy yang diatur, egress langsung digunakan. Jika konfigurasi proxy salah format, OpenClaw mencatat peringatan dan fallback ke fetch langsung. ## Deteksi mention dalam grup -Saat `requireMention: true` disetel untuk chat grup, OpenClaw sekarang mentranskripsi audio **sebelum** memeriksa mention. Ini memungkinkan catatan suara diproses bahkan saat berisi mention. +Saat `requireMention: true` diatur untuk chat grup, OpenClaw sekarang mentranskripsi audio **sebelum** memeriksa mention. Ini memungkinkan catatan suara diproses bahkan ketika berisi mention. **Cara kerjanya:** @@ -198,24 +199,24 @@ Saat `requireMention: true` disetel untuk chat grup, OpenClaw sekarang mentransk **Perilaku fallback:** -- Jika transkripsi gagal selama preflight (timeout, error API, dll.), pesan diproses berdasarkan deteksi mention teks saja. -- Ini memastikan pesan campuran (teks + audio) tidak pernah salah dijatuhkan. +- Jika transkripsi gagal selama preflight (timeout, kesalahan API, dll.), pesan diproses berdasarkan deteksi mention teks saja. +- Ini memastikan bahwa pesan campuran (teks + audio) tidak pernah keliru dibuang. **Opt-out per grup/topik Telegram:** -- Setel `channels.telegram.groups..disableAudioPreflight: true` untuk melewati pemeriksaan mention transkrip preflight untuk grup tersebut. -- Setel `channels.telegram.groups..topics..disableAudioPreflight` untuk mengganti per topik (`true` untuk melewati, `false` untuk memaksa aktif). -- Default adalah `false` (preflight aktif saat kondisi yang dibatasi mention cocok). +- Atur `channels.telegram.groups..disableAudioPreflight: true` untuk melewati pemeriksaan mention transkrip preflight untuk grup tersebut. +- Atur `channels.telegram.groups..topics..disableAudioPreflight` untuk menimpa per topik (`true` untuk melewati, `false` untuk memaksa aktif). +- Default adalah `false` (preflight diaktifkan saat kondisi yang dibatasi mention cocok). **Contoh:** Pengguna mengirim catatan suara yang mengatakan "Hey @Claude, what's the weather?" di grup Telegram dengan `requireMention: true`. Catatan suara ditranskripsi, mention terdeteksi, dan agen membalas. ## Hal yang perlu diperhatikan -- Aturan scope menggunakan kecocokan pertama yang menang. `chatType` dinormalisasi menjadi `direct`, `group`, atau `room`. -- Pastikan CLI Anda keluar 0 dan mencetak teks biasa; JSON perlu diproses melalui `jq -r .text`. -- Untuk `parakeet-mlx`, jika Anda meneruskan `--output-dir`, OpenClaw membaca `/.txt` saat `--output-format` adalah `txt` (atau dihilangkan); format output non-`txt` kembali ke penguraian stdout. -- Jaga timeout tetap wajar (`timeoutSeconds`, bawaan 60 dtk) untuk menghindari pemblokiran antrean balasan. -- Transkripsi preflight hanya memproses lampiran audio **pertama** untuk deteksi mention. Audio tambahan diproses selama fase pemahaman media utama. +- Aturan cakupan menggunakan kecocokan pertama yang menang. `chatType` dinormalisasi menjadi `direct`, `group`, atau `room`. +- Pastikan CLI Anda keluar dengan 0 dan mencetak teks biasa; JSON perlu diproses melalui `jq -r .text`. +- Untuk `parakeet-mlx`, jika Anda meneruskan `--output-dir`, OpenClaw membaca `/.txt` saat `--output-format` adalah `txt` (atau dihilangkan); format output non-`txt` fallback ke penguraian stdout. +- Jaga timeout tetap wajar (`timeoutSeconds`, default 60d) untuk menghindari pemblokiran antrean balasan. +- Transkripsi preflight hanya memproses lampiran audio **pertama** untuk deteksi mention. Audio tambahan diproses selama fase utama pemahaman media. ## Terkait diff --git a/docs/id/plugins/codex-harness.md b/docs/id/plugins/codex-harness.md index 23217d5bc..b99b775c7 100644 --- a/docs/id/plugins/codex-harness.md +++ b/docs/id/plugins/codex-harness.md @@ -1,15 +1,15 @@ --- read_when: - - Anda ingin menggunakan harness app-server Codex bawaan + - Anda ingin menggunakan kerangka server aplikasi Codex yang disertakan - Anda memerlukan contoh konfigurasi harness Codex - - Anda ingin penerapan khusus Codex gagal alih-alih kembali menggunakan PI -summary: Jalankan giliran agen tertanam OpenClaw melalui harness app-server Codex yang dibundel + - Anda ingin penerapan khusus Codex gagal alih-alih kembali ke PI +summary: Jalankan giliran agen tertanam OpenClaw melalui harness app-server Codex bawaan title: Kerangka kerja Codex x-i18n: - generated_at: "2026-05-02T09:26:34Z" + generated_at: "2026-05-02T23:39:27Z" model: gpt-5.5 provider: openai - source_hash: 107f9fc0a3e8ad6a4790fc9eb68276c81d299236f11293014d2ab9bf6e235133 + source_hash: 8ffa0cbb28422b2ed8d7c0eef6ee0222072c523d170b4b33597bb37bd3fa9700 source_path: plugins/codex-harness.md workflow: 16 --- @@ -17,37 +17,37 @@ x-i18n: Plugin `codex` bawaan memungkinkan OpenClaw menjalankan giliran agen tertanam melalui app-server Codex alih-alih harness PI bawaan. -Gunakan ini ketika Anda ingin Codex memiliki sesi agen tingkat rendah: penemuan +Gunakan ini saat Anda ingin Codex memiliki sesi agen level rendah: penemuan model, pelanjutan thread native, compaction native, dan eksekusi app-server. OpenClaw tetap memiliki channel chat, file sesi, pemilihan model, alat, persetujuan, pengiriman media, dan cermin transkrip yang terlihat. -Ketika giliran chat sumber berjalan melalui harness Codex, balasan yang terlihat -secara default menggunakan alat `message` OpenClaw jika deployment belum secara -eksplisit mengonfigurasi `messages.visibleReplies`. Agen masih dapat -menyelesaikan giliran Codex secara privat; agen hanya mengirim ke channel ketika -memanggil `message(action="send")`. Atur -`messages.visibleReplies: "automatic"` untuk mempertahankan balasan akhir chat -langsung pada jalur pengiriman otomatis lama. +Saat giliran chat sumber berjalan melalui harness Codex, balasan yang terlihat +secara default memakai alat `message` OpenClaw jika deployment belum secara +eksplisit mengonfigurasi `messages.visibleReplies`. Agen tetap dapat +menyelesaikan giliran Codex-nya secara privat; agen hanya memposting ke channel +saat memanggil `message(action="send")`. Atur +`messages.visibleReplies: "automatic"` untuk mempertahankan balasan akhir +chat langsung pada jalur pengiriman otomatis lama. Giliran heartbeat Codex juga mendapatkan alat `heartbeat_respond` secara default, sehingga agen dapat mencatat apakah wake harus tetap senyap atau -memberi notifikasi tanpa menyandikan alur kontrol itu dalam teks akhir. +memberi notifikasi tanpa mengodekan alur kontrol itu di teks akhir. -Jika Anda mencoba memahami konteksnya, mulai dengan -[Runtime agen](/id/concepts/agent-runtimes). Versi singkatnya adalah: -`openai/gpt-5.5` adalah ref model, `codex` adalah runtime, dan Telegram, +Jika Anda sedang mencoba memahami orientasinya, mulai dengan +[Runtime agen](/id/concepts/agent-runtimes). Versi singkatnya: +`openai/gpt-5.5` adalah referensi model, `codex` adalah runtime, dan Telegram, Discord, Slack, atau channel lain tetap menjadi permukaan komunikasi. ## Konfigurasi cepat -Sebagian besar pengguna yang menginginkan "Codex di OpenClaw" menginginkan rute -ini: masuk dengan langganan ChatGPT/Codex, lalu jalankan giliran agen tertanam -melalui runtime app-server Codex native. Ref model tetap kanonis sebagai -`openai/gpt-*`; autentikasi langganan berasal dari akun/profil Codex, bukan dari -prefiks model `openai-codex/*`. +Sebagian besar pengguna yang menginginkan "Codex di OpenClaw" menginginkan rute ini: +masuk dengan langganan ChatGPT/Codex, lalu jalankan giliran agen tertanam melalui +runtime app-server Codex native. Referensi model tetap kanonis sebagai +`openai/gpt-*`; autentikasi langganan berasal dari akun/profil Codex, bukan +dari prefiks model `openai-codex/*`. -Pertama masuk dengan OAuth Codex jika Anda belum melakukannya: +Masuk terlebih dahulu dengan Codex OAuth jika Anda belum melakukannya: ```bash openclaw models auth login --provider openai-codex @@ -91,41 +91,41 @@ Jika konfigurasi Anda menggunakan `plugins.allow`, sertakan juga `codex` di sana } ``` -Jangan gunakan `openai-codex/gpt-*` ketika yang Anda maksud adalah runtime Codex -native. Prefiks itu adalah rute eksplisit "OAuth Codex melalui PI". Perubahan -konfigurasi berlaku untuk sesi baru atau yang direset; sesi yang ada tetap -menyimpan runtime yang tercatat. +Jangan gunakan `openai-codex/gpt-*` saat yang Anda maksud adalah runtime Codex +native. Prefiks itu adalah rute eksplisit "Codex OAuth melalui PI". Perubahan +konfigurasi berlaku untuk sesi baru atau yang direset; sesi yang sudah ada tetap +mempertahankan runtime yang tercatat. -## Apa yang diubah Plugin ini +## Yang diubah Plugin ini -Plugin `codex` bawaan menyumbangkan beberapa kemampuan terpisah: +Plugin `codex` bawaan menyumbangkan beberapa kapabilitas terpisah: -| Kemampuan | Cara Anda menggunakannya | Fungsinya | -| --------------------------------- | --------------------------------------------------- | ------------------------------------------------------------------------------ | -| Runtime tertanam native | `agentRuntime.id: "codex"` | Menjalankan giliran agen tertanam OpenClaw melalui app-server Codex. | -| Perintah kontrol chat native | `/codex bind`, `/codex resume`, `/codex steer`, ... | Mengikat dan mengontrol thread app-server Codex dari percakapan perpesanan. | -| Penyedia/katalog app-server Codex | internal `codex`, diekspos melalui harness | Memungkinkan runtime menemukan dan memvalidasi model app-server. | -| Jalur pemahaman media Codex | jalur kompatibilitas model gambar `codex/*` | Menjalankan giliran app-server Codex terbatas untuk model pemahaman gambar yang didukung. | -| Relay hook native | Hook Plugin di sekitar event native Codex | Memungkinkan OpenClaw mengamati/memblokir event alat/finalisasi native Codex yang didukung. | +| Kapabilitas | Cara Anda menggunakannya | Yang dilakukannya | +| -------------------------------- | --------------------------------------------------- | --------------------------------------------------------------------------- | +| Runtime tertanam native | `agentRuntime.id: "codex"` | Menjalankan giliran agen tertanam OpenClaw melalui app-server Codex. | +| Perintah kontrol chat native | `/codex bind`, `/codex resume`, `/codex steer`, ... | Mengikat dan mengontrol thread app-server Codex dari percakapan pesan. | +| Penyedia/katalog app-server Codex | internal `codex`, diekspos melalui harness | Memungkinkan runtime menemukan dan memvalidasi model app-server. | +| Jalur pemahaman media Codex | jalur kompatibilitas model gambar `codex/*` | Menjalankan giliran app-server Codex terbatas untuk model pemahaman gambar yang didukung. | +| Relay hook native | Hook Plugin di sekitar event Codex-native | Memungkinkan OpenClaw mengamati/memblokir event alat/finalisasi Codex-native yang didukung. | -Mengaktifkan Plugin membuat kemampuan tersebut tersedia. Ini **tidak**: +Mengaktifkan Plugin membuat kapabilitas tersebut tersedia. Ini **tidak**: - mulai menggunakan Codex untuk setiap model OpenAI -- mengubah ref model `openai-codex/*` menjadi runtime native -- menjadikan ACP/acpx sebagai jalur Codex default -- hot-switch sesi yang sudah ada yang telah mencatat runtime PI -- menggantikan pengiriman channel OpenClaw, file sesi, penyimpanan profil autentikasi, atau - perutean pesan +- mengonversi referensi model `openai-codex/*` menjadi runtime native +- menjadikan ACP/acpx jalur Codex default +- mengganti secara langsung sesi yang sudah mencatat runtime PI +- menggantikan pengiriman channel OpenClaw, file sesi, penyimpanan profil + autentikasi, atau routing pesan -Plugin yang sama juga memiliki permukaan perintah kontrol chat native `/codex`. +Plugin yang sama juga memiliki permukaan perintah kontrol chat `/codex` native. Jika Plugin diaktifkan dan pengguna meminta untuk mengikat, melanjutkan, -mengarahkan, menghentikan, atau memeriksa thread Codex dari chat, agen sebaiknya -lebih memilih `/codex ...` daripada ACP. ACP tetap menjadi fallback eksplisit -ketika pengguna meminta ACP/acpx atau sedang menguji adapter Codex ACP. +mengarahkan, menghentikan, atau memeriksa thread Codex dari chat, agen harus +memilih `/codex ...` daripada ACP. ACP tetap menjadi fallback eksplisit saat +pengguna meminta ACP/acpx atau sedang menguji adaptor Codex ACP. Giliran Codex native mempertahankan hook Plugin OpenClaw sebagai lapisan -kompatibilitas publik. Ini adalah hook OpenClaw dalam proses, bukan hook perintah -`hooks.json` Codex: +kompatibilitas publik. Ini adalah hook OpenClaw dalam proses, bukan hook +perintah `hooks.json` Codex: - `before_prompt_build` - `before_compaction`, `after_compaction` @@ -135,162 +135,176 @@ kompatibilitas publik. Ini adalah hook OpenClaw dalam proses, bukan hook perinta - `before_agent_finalize` melalui relay `Stop` Codex - `agent_end` -Plugin juga dapat mendaftarkan middleware hasil alat yang netral runtime untuk -menulis ulang hasil alat dinamis OpenClaw setelah OpenClaw menjalankan alat dan -sebelum hasil dikembalikan ke Codex. Ini terpisah dari hook Plugin publik -`tool_result_persist`, yang mentransformasi penulisan hasil alat transkrip yang -dimiliki OpenClaw. +Plugin juga dapat mendaftarkan middleware hasil alat yang netral terhadap +runtime untuk menulis ulang hasil alat dinamis OpenClaw setelah OpenClaw +mengeksekusi alat dan sebelum hasil dikembalikan ke Codex. Ini terpisah dari +hook Plugin publik `tool_result_persist`, yang mentransformasi penulisan hasil +alat transkrip milik OpenClaw. Untuk semantik hook Plugin itu sendiri, lihat [Hook Plugin](/id/plugins/hooks) dan [Perilaku guard Plugin](/id/tools/plugin). -Harness nonaktif secara default. Konfigurasi baru sebaiknya mempertahankan ref -model OpenAI tetap kanonis sebagai `openai/gpt-*` dan secara eksplisit memaksa -`agentRuntime.id: "codex"` atau `OPENCLAW_AGENT_RUNTIME=codex` ketika -menginginkan eksekusi app-server native. Ref model lama `codex/*` masih -memilih harness secara otomatis untuk kompatibilitas, tetapi prefiks -penyedia lama yang didukung runtime tidak ditampilkan sebagai pilihan -model/penyedia normal. +Harness nonaktif secara default. Konfigurasi baru harus mempertahankan referensi +model OpenAI secara kanonis sebagai `openai/gpt-*` dan secara eksplisit memaksa +`agentRuntime.id: "codex"` atau `OPENCLAW_AGENT_RUNTIME=codex` saat menginginkan +eksekusi app-server native. Referensi model lama `codex/*` masih otomatis +memilih harness untuk kompatibilitas, tetapi prefiks penyedia lama yang +didukung runtime tidak ditampilkan sebagai pilihan model/penyedia normal. -Jika Plugin `codex` diaktifkan tetapi model utama masih -`openai-codex/*`, `openclaw doctor` memberi peringatan alih-alih mengubah rute. -Ini disengaja: `openai-codex/*` tetap menjadi jalur OAuth/langganan Codex PI, dan -eksekusi app-server native tetap menjadi pilihan runtime eksplisit. +Jika Plugin `codex` diaktifkan tetapi model utama masih `openai-codex/*`, +`openclaw doctor` memberi peringatan alih-alih mengubah rute. Itu disengaja: +`openai-codex/*` tetap menjadi jalur PI Codex OAuth/langganan, dan eksekusi +app-server native tetap menjadi pilihan runtime eksplisit. ## Peta rute Gunakan tabel ini sebelum mengubah konfigurasi: -| Perilaku yang diinginkan | Ref model | Konfigurasi runtime | Rute autentikasi/profil | Label status yang diharapkan | -| ----------------------------------------------------- | -------------------------- | ------------------------------------- | ---------------------------- | ------------------------------ | -| Langganan ChatGPT/Codex dengan runtime Codex native | `openai/gpt-*` | `agentRuntime.id: "codex"` | OAuth Codex atau akun Codex | `Runtime: OpenAI Codex` | -| OpenAI API melalui runner OpenClaw normal | `openai/gpt-*` | dihilangkan atau `runtime: "pi"` | Kunci API OpenAI | `Runtime: OpenClaw Pi Default` | -| Langganan ChatGPT/Codex melalui PI | `openai-codex/gpt-*` | dihilangkan atau `runtime: "pi"` | Penyedia OAuth OpenAI Codex | `Runtime: OpenClaw Pi Default` | -| Penyedia campuran dengan mode otomatis konservatif | ref khusus penyedia | `agentRuntime.id: "auto"` | Per penyedia yang dipilih | Bergantung pada runtime yang dipilih | -| Sesi adapter ACP Codex eksplisit | bergantung prompt/model ACP | `sessions_spawn` dengan `runtime: "acp"` | Autentikasi backend ACP | Status tugas/sesi ACP | +| Perilaku yang diinginkan | Referensi model | Konfigurasi runtime | Rute autentikasi/profil | Label status yang diharapkan | +| ------------------------------------------------ | ------------------------- | -------------------------------------- | --------------------------- | ------------------------------ | +| Langganan ChatGPT/Codex dengan runtime Codex native | `openai/gpt-*` | `agentRuntime.id: "codex"` | Codex OAuth atau akun Codex | `Runtime: OpenAI Codex` | +| OpenAI API melalui runner OpenClaw normal | `openai/gpt-*` | dihilangkan atau `runtime: "pi"` | Kunci API OpenAI | `Runtime: OpenClaw Pi Default` | +| Langganan ChatGPT/Codex melalui PI | `openai-codex/gpt-*` | dihilangkan atau `runtime: "pi"` | Penyedia OpenAI Codex OAuth | `Runtime: OpenClaw Pi Default` | +| Penyedia campuran dengan mode otomatis konservatif | referensi spesifik penyedia | `agentRuntime.id: "auto"` | Per penyedia yang dipilih | Bergantung pada runtime yang dipilih | +| Sesi adaptor Codex ACP eksplisit | bergantung pada prompt/model ACP | `sessions_spawn` dengan `runtime: "acp"` | Autentikasi backend ACP | Status tugas/sesi ACP | Pemisahan pentingnya adalah penyedia versus runtime: -- `openai-codex/*` menjawab "rute penyedia/autentikasi mana yang harus digunakan PI?" -- `agentRuntime.id: "codex"` menjawab "loop mana yang harus mengeksekusi giliran - tertanam ini?" +- `openai-codex/*` menjawab "rute penyedia/autentikasi mana yang harus dipakai PI?" +- `agentRuntime.id: "codex"` menjawab "loop mana yang harus mengeksekusi + giliran tertanam ini?" - `/codex ...` menjawab "percakapan Codex native mana yang harus diikat atau - dikontrol oleh chat ini?" + dikontrol chat ini?" - ACP menjawab "proses harness eksternal mana yang harus diluncurkan acpx?" ## Pilih prefiks model yang tepat -Rute keluarga OpenAI bersifat khusus prefiks. Untuk penyiapan umum langganan -plus runtime Codex native, gunakan `openai/*` dengan `agentRuntime.id: "codex"`. -Gunakan `openai-codex/*` hanya ketika Anda sengaja menginginkan OAuth Codex -melalui PI: +Rute keluarga OpenAI bersifat spesifik prefiks. Untuk setup umum langganan plus +runtime Codex native, gunakan `openai/*` dengan `agentRuntime.id: "codex"`. +Gunakan `openai-codex/*` hanya saat Anda sengaja menginginkan Codex OAuth melalui PI: -| Ref model | Jalur runtime | Gunakan ketika | -| --------------------------------------------- | -------------------------------------------- | -------------------------------------------------------------------------- | -| `openai/gpt-5.4` | Penyedia OpenAI melalui plumbing OpenClaw/PI | Anda menginginkan akses API OpenAI Platform langsung saat ini dengan `OPENAI_API_KEY`. | -| `openai-codex/gpt-5.5` | OAuth OpenAI Codex melalui OpenClaw/PI | Anda menginginkan autentikasi langganan ChatGPT/Codex dengan runner PI default. | -| `openai/gpt-5.5` + `agentRuntime.id: "codex"` | Harness app-server Codex | Anda menginginkan autentikasi langganan ChatGPT/Codex dengan eksekusi Codex native. | +| Referensi model | Jalur runtime | Gunakan saat | +| -------------------------------------------- | ------------------------------------------- | ------------------------------------------------------------------------- | +| `openai/gpt-5.4` | Penyedia OpenAI melalui plumbing OpenClaw/PI | Anda menginginkan akses OpenAI Platform API langsung saat ini dengan `OPENAI_API_KEY`. | +| `openai-codex/gpt-5.5` | OpenAI Codex OAuth melalui OpenClaw/PI | Anda menginginkan autentikasi langganan ChatGPT/Codex dengan runner PI default. | +| `openai/gpt-5.5` + `agentRuntime.id: "codex"` | Harness app-server Codex | Anda menginginkan autentikasi langganan ChatGPT/Codex dengan eksekusi Codex native. | GPT-5.5 dapat muncul pada rute kunci API OpenAI langsung dan langganan Codex -ketika akun Anda mengeksposnya. Gunakan `openai/gpt-5.5` dengan harness -app-server Codex untuk runtime Codex native, `openai-codex/gpt-5.5` untuk OAuth -PI, atau `openai/gpt-5.5` tanpa override runtime Codex untuk trafik kunci API +saat akun Anda mengeksposnya. Gunakan `openai/gpt-5.5` dengan harness +app-server Codex untuk runtime Codex native, `openai-codex/gpt-5.5` untuk PI +OAuth, atau `openai/gpt-5.5` tanpa override runtime Codex untuk trafik kunci API langsung. -Ref lama `codex/gpt-*` tetap diterima sebagai alias kompatibilitas. Migrasi -kompatibilitas doctor menulis ulang ref runtime utama lama menjadi ref model -kanonis dan mencatat kebijakan runtime secara terpisah, sementara ref lama yang -hanya fallback dibiarkan tidak berubah karena runtime dikonfigurasi untuk seluruh -container agen. Konfigurasi OAuth Codex PI baru sebaiknya menggunakan -`openai-codex/gpt-*`; konfigurasi harness app-server native baru sebaiknya -menggunakan `openai/gpt-*` plus `agentRuntime.id: "codex"`. +Referensi lama `codex/gpt-*` tetap diterima sebagai alias kompatibilitas. +Migrasi kompatibilitas doctor menulis ulang referensi runtime utama lama menjadi +referensi model kanonis dan mencatat kebijakan runtime secara terpisah, sementara +referensi lama yang hanya fallback dibiarkan tidak berubah karena runtime +dikonfigurasi untuk seluruh kontainer agen. Konfigurasi PI Codex OAuth baru +harus menggunakan `openai-codex/gpt-*`; konfigurasi harness app-server native +baru harus menggunakan `openai/gpt-*` plus `agentRuntime.id: "codex"`. `agents.defaults.imageModel` mengikuti pemisahan prefiks yang sama. Gunakan -`openai-codex/gpt-*` ketika pemahaman gambar harus berjalan melalui jalur -penyedia OAuth OpenAI Codex. Gunakan `codex/gpt-*` ketika pemahaman gambar harus -berjalan melalui giliran app-server Codex terbatas. Model app-server Codex harus -mengiklankan dukungan input gambar; model Codex khusus teks gagal sebelum giliran -media dimulai. +`openai-codex/gpt-*` saat pemahaman gambar harus berjalan melalui jalur penyedia +OpenAI Codex OAuth. Gunakan `codex/gpt-*` saat pemahaman gambar harus berjalan +melalui giliran app-server Codex terbatas. Model app-server Codex harus +mengiklankan dukungan input gambar; model Codex yang hanya teks gagal sebelum +giliran media dimulai. Gunakan `/status` untuk mengonfirmasi harness efektif untuk sesi saat ini. Jika -pilihannya mengejutkan, aktifkan logging debug untuk subsistem `agents/harness` -dan periksa catatan terstruktur `agent harness selected` milik gateway. Catatan -itu mencakup id harness yang dipilih, alasan pemilihan, kebijakan -runtime/fallback, dan, dalam mode `auto`, hasil dukungan setiap kandidat Plugin. +pemilihannya mengejutkan, aktifkan logging debug untuk subsistem +`agents/harness` dan periksa catatan terstruktur `agent harness selected` milik +Gateway. Catatan itu mencakup id harness yang dipilih, alasan pemilihan, +kebijakan runtime/fallback, dan, dalam mode `auto`, hasil dukungan setiap +kandidat Plugin. ### Arti peringatan doctor -`openclaw doctor` memberi peringatan ketika semua ini benar: +`openclaw doctor` memberi peringatan saat semua hal ini benar: - Plugin `codex` bawaan diaktifkan atau diizinkan - model utama agen adalah `openai-codex/*` - runtime efektif agen tersebut bukan `codex` Peringatan itu ada karena pengguna sering mengharapkan "Plugin Codex diaktifkan" -berarti "runtime app-server Codex native." OpenClaw tidak membuat lompatan itu. -Peringatan tersebut berarti: +berarti "runtime app-server Codex native." OpenClaw tidak mengambil lompatan +itu. Peringatan tersebut berarti: -- **Tidak ada perubahan yang diperlukan** jika Anda memang menginginkan OAuth ChatGPT/Codex melalui PI. +- **Tidak ada perubahan yang diperlukan** jika Anda memang bermaksud menggunakan + ChatGPT/Codex OAuth melalui PI. - Ubah model menjadi `openai/` dan atur - `agentRuntime.id: "codex"` jika Anda menginginkan eksekusi app-server - native. -- Sesi yang ada masih memerlukan `/new` atau `/reset` setelah perubahan runtime, - karena pin runtime sesi bersifat lengket. + `agentRuntime.id: "codex"` jika Anda bermaksud menggunakan eksekusi + app-server native. +- Sesi yang sudah ada tetap memerlukan `/new` atau `/reset` setelah perubahan + runtime, karena pin runtime sesi bersifat melekat. -Pemilihan harness bukan kontrol sesi langsung. Ketika giliran tertanam berjalan, +Pemilihan harness bukan kontrol sesi langsung. Saat giliran tertanam berjalan, OpenClaw mencatat id harness yang dipilih pada sesi tersebut dan terus -menggunakannya untuk giliran berikutnya dalam id sesi yang sama. Ubah konfigurasi -`agentRuntime` atau `OPENCLAW_AGENT_RUNTIME` ketika Anda ingin sesi mendatang -menggunakan harness lain; gunakan `/new` atau `/reset` untuk memulai sesi baru -sebelum beralih pada percakapan yang ada antara PI dan Codex. Ini menghindari -pemutaran ulang satu transkrip melalui dua sistem sesi native yang tidak kompatibel. +menggunakannya untuk giliran berikutnya dalam id sesi yang sama. Ubah +konfigurasi `agentRuntime` atau `OPENCLAW_AGENT_RUNTIME` saat Anda ingin sesi +mendatang menggunakan harness lain; gunakan `/new` atau `/reset` untuk memulai +sesi baru sebelum mengganti percakapan yang sudah ada antara PI dan Codex. Ini +menghindari pemutaran ulang satu transkrip melalui dua sistem sesi native yang +tidak kompatibel. -Sesi lama yang dibuat sebelum pin harness diperlakukan sebagai dipin ke PI -setelah memiliki riwayat transkrip. Gunakan `/new` atau `/reset` untuk -mengikutsertakan percakapan tersebut ke Codex setelah mengubah konfigurasi. +Sesi lama yang dibuat sebelum pin harness diperlakukan sebagai terpin PI setelah +memiliki riwayat transkrip. Gunakan `/new` atau `/reset` untuk memasukkan +percakapan itu ke Codex setelah mengubah konfigurasi. -`/status` menampilkan runtime model efektif. Harness PI bawaan muncul sebagai +`/status` menampilkan runtime model efektif. Harness PI default muncul sebagai `Runtime: OpenClaw Pi Default`, dan harness app-server Codex muncul sebagai `Runtime: OpenAI Codex`. ## Persyaratan -- OpenClaw dengan Plugin `codex` bawaan tersedia. +- OpenClaw dengan Plugin `codex` bawaan yang tersedia. - App-server Codex `0.125.0` atau yang lebih baru. Plugin bawaan mengelola biner - app-server Codex yang kompatibel secara default, sehingga perintah `codex` lokal - pada `PATH` tidak memengaruhi startup harness normal. -- Auth Codex tersedia untuk proses app-server atau untuk bridge auth Codex - OpenClaw. Peluncuran app-server lokal menggunakan home Codex yang dikelola - OpenClaw untuk setiap agen dan child `HOME` yang terisolasi, sehingga secara + app-server Codex yang kompatibel secara default, sehingga perintah `codex` + lokal di `PATH` tidak memengaruhi startup harness normal. +- Autentikasi Codex tersedia untuk proses app-server atau untuk bridge autentikasi + Codex OpenClaw. Peluncuran app-server lokal menggunakan home Codex yang dikelola + OpenClaw untuk setiap agent dan `HOME` turunan yang terisolasi, sehingga secara default tidak membaca akun, skills, plugins, konfigurasi, status thread, atau `$HOME/.agents/skills` native pribadi Anda di `~/.codex`. -Plugin memblokir handshake app-server yang lebih lama atau tanpa versi. Ini menjaga +Plugin memblokir handshake app-server yang lebih lama atau tidak berversi. Ini menjaga OpenClaw tetap berada pada permukaan protokol yang telah diuji. -Untuk pengujian smoke live dan Docker, auth biasanya berasal dari akun CLI Codex -atau profil auth `openai-codex` OpenClaw. Peluncuran app-server stdio lokal juga -dapat fallback ke `CODEX_API_KEY` / `OPENAI_API_KEY` ketika tidak ada akun. +Untuk uji smoke live dan Docker, autentikasi biasanya berasal dari akun CLI Codex +atau profil autentikasi `openai-codex` OpenClaw. Peluncuran app-server stdio lokal +juga dapat beralih ke `CODEX_API_KEY` / `OPENAI_API_KEY` ketika tidak ada akun. -## Tambahkan Codex berdampingan dengan model lain +## File bootstrap workspace -Jangan tetapkan `agentRuntime.id: "codex"` secara global jika agen yang sama harus -bebas beralih antara Codex dan model penyedia non-Codex. Runtime yang dipaksakan -berlaku untuk setiap giliran tertanam untuk agen atau sesi tersebut. Jika Anda -memilih model Anthropic saat runtime tersebut dipaksakan, OpenClaw tetap mencoba -harness Codex dan gagal tertutup alih-alih diam-diam merutekan giliran tersebut -melalui PI. +Codex menangani `AGENTS.md` sendiri melalui penemuan dokumen proyek native. OpenClaw +tidak menulis file dokumen proyek Codex sintetis atau bergantung pada nama file fallback +Codex untuk file persona, karena fallback Codex hanya berlaku ketika +`AGENTS.md` tidak ada. -Gunakan salah satu bentuk berikut sebagai gantinya: +Untuk paritas workspace OpenClaw, harness Codex menyelesaikan file bootstrap lain +(`SOUL.md`, `TOOLS.md`, `IDENTITY.md`, `USER.md`, `HEARTBEAT.md`, +`BOOTSTRAP.md`, dan `MEMORY.md` jika ada) dan meneruskannya melalui instruksi +konfigurasi Codex pada `thread/start` dan `thread/resume`. Ini membuat konteks +persona/profil workspace `SOUL.md` dan yang terkait tetap terlihat tanpa +menduplikasi `AGENTS.md`. -- Tempatkan Codex pada agen khusus dengan `agentRuntime.id: "codex"`. -- Pertahankan agen default pada `agentRuntime.id: "auto"` dan fallback PI untuk - penggunaan penyedia campuran normal. -- Gunakan ref lama `codex/*` hanya untuk kompatibilitas. Konfigurasi baru sebaiknya - memilih `openai/*` ditambah kebijakan runtime Codex yang eksplisit. +## Tambahkan Codex bersama model lain -Contohnya, ini mempertahankan agen default pada seleksi otomatis normal dan -menambahkan agen Codex terpisah: +Jangan tetapkan `agentRuntime.id: "codex"` secara global jika agent yang sama harus +bebas beralih antara Codex dan model penyedia non-Codex. Runtime yang dipaksa berlaku +untuk setiap giliran tertanam bagi agent atau sesi tersebut. Jika Anda memilih model +Anthropic saat runtime tersebut dipaksa, OpenClaw tetap mencoba harness Codex dan gagal +tertutup alih-alih secara diam-diam merutekan giliran tersebut melalui PI. + +Gunakan salah satu bentuk ini sebagai gantinya: + +- Letakkan Codex pada agent khusus dengan `agentRuntime.id: "codex"`. +- Pertahankan agent default pada `agentRuntime.id: "auto"` dan fallback PI untuk penggunaan + penyedia campuran normal. +- Gunakan referensi lama `codex/*` hanya untuk kompatibilitas. Konfigurasi baru sebaiknya + menggunakan `openai/*` plus kebijakan runtime Codex eksplisit. + +Contohnya, ini mempertahankan agent default pada pemilihan otomatis normal dan +menambahkan agent Codex terpisah: ```json5 { @@ -329,38 +343,36 @@ menambahkan agen Codex terpisah: Dengan bentuk ini: -- Agen `main` default menggunakan jalur penyedia normal dan fallback kompatibilitas PI. -- Agen `codex` menggunakan harness app-server Codex. -- Jika Codex hilang atau tidak didukung untuk agen `codex`, giliran akan gagal +- Agent `main` default menggunakan jalur penyedia normal dan fallback kompatibilitas PI. +- Agent `codex` menggunakan harness app-server Codex. +- Jika Codex hilang atau tidak didukung untuk agent `codex`, giliran gagal alih-alih diam-diam menggunakan PI. -## Perutean perintah agen +## Perutean perintah agent -Agen harus merutekan permintaan pengguna berdasarkan intent, bukan hanya kata "Codex": +Agent harus merutekan permintaan pengguna berdasarkan maksud, bukan hanya berdasarkan kata "Codex": -| Pengguna meminta... | Agen sebaiknya menggunakan... | -| ------------------------------------------------------ | ------------------------------------------------ | -| "Ikat chat ini ke Codex" | `/codex bind` | -| "Lanjutkan thread Codex `` di sini" | `/codex resume ` | -| "Tampilkan thread Codex" | `/codex threads` | -| "Ajukan laporan dukungan untuk run Codex yang buruk" | `/diagnostics [note]` | -| "Hanya kirim feedback Codex untuk thread terlampir ini" | `/codex diagnostics [note]` | -| "Gunakan langganan ChatGPT/Codex saya dengan runtime Codex" | `openai/*` plus `agentRuntime.id: "codex"` | -| "Gunakan langganan ChatGPT/Codex saya melalui PI" | ref model `openai-codex/*` | -| "Jalankan Codex melalui ACP/acpx" | ACP `sessions_spawn({ runtime: "acp", ... })` | -| "Mulai Claude Code/Gemini/OpenCode/Cursor dalam thread" | ACP/acpx, bukan `/codex` dan bukan sub-agen native | +| Pengguna meminta... | Agent harus menggunakan... | +| -------------------------------------------------------- | -------------------------------------------------- | +| "Ikat chat ini ke Codex" | `/codex bind` | +| "Lanjutkan thread Codex `` di sini" | `/codex resume ` | +| "Tampilkan thread Codex" | `/codex threads` | +| "Buat laporan dukungan untuk eksekusi Codex yang buruk" | `/diagnostics [note]` | +| "Hanya kirim masukan Codex untuk thread terlampir ini" | `/codex diagnostics [note]` | +| "Gunakan langganan ChatGPT/Codex saya dengan runtime Codex" | `openai/*` plus `agentRuntime.id: "codex"` | +| "Gunakan langganan ChatGPT/Codex saya melalui PI" | referensi model `openai-codex/*` | +| "Jalankan Codex melalui ACP/acpx" | ACP `sessions_spawn({ runtime: "acp", ... })` | +| "Mulai Claude Code/Gemini/OpenCode/Cursor dalam thread" | ACP/acpx, bukan `/codex` dan bukan sub-agent native | -OpenClaw hanya mengiklankan panduan spawn ACP kepada agen ketika ACP diaktifkan, -dapat di-dispatch, dan didukung oleh backend runtime yang dimuat. Jika ACP tidak -tersedia, system prompt dan Plugin skills tidak boleh mengajarkan agen tentang -perutean ACP. +OpenClaw hanya mengiklankan panduan spawn ACP kepada agent ketika ACP diaktifkan, +dapat didispatch, dan didukung oleh backend runtime yang dimuat. Jika ACP tidak tersedia, +prompt sistem dan skills Plugin tidak boleh mengajari agent tentang perutean ACP. ## Deployment khusus Codex -Paksa harness Codex ketika Anda perlu membuktikan bahwa setiap giliran agen -tertanam menggunakan Codex. Runtime Plugin eksplisit default-nya tanpa fallback PI, -sehingga `fallback: "none"` bersifat opsional tetapi sering berguna sebagai -dokumentasi: +Paksa harness Codex ketika Anda perlu membuktikan bahwa setiap giliran agent tertanam +menggunakan Codex. Runtime Plugin eksplisit secara default tidak memiliki fallback PI, sehingga +`fallback: "none"` bersifat opsional tetapi sering berguna sebagai dokumentasi: ```json5 { @@ -376,21 +388,21 @@ dokumentasi: } ``` -Override environment: +Override lingkungan: ```bash OPENCLAW_AGENT_RUNTIME=codex openclaw gateway run ``` -Dengan Codex dipaksakan, OpenClaw gagal lebih awal jika Plugin Codex dinonaktifkan, -app-server terlalu lama, atau app-server tidak dapat dimulai. Tetapkan -`OPENCLAW_AGENT_HARNESS_FALLBACK=pi` hanya jika Anda memang ingin PI menangani +Dengan Codex dipaksa, OpenClaw gagal lebih awal jika Plugin Codex dinonaktifkan, app-server +terlalu lama, atau app-server tidak dapat dimulai. Tetapkan +`OPENCLAW_AGENT_HARNESS_FALLBACK=pi` hanya jika Anda sengaja ingin PI menangani pemilihan harness yang hilang. -## Codex per agen +## Codex per agent -Anda dapat membuat satu agen khusus Codex sementara agen default tetap mempertahankan -seleksi otomatis normal: +Anda dapat membuat satu agent hanya-Codex sementara agent default mempertahankan +pemilihan otomatis normal: ```json5 { @@ -421,15 +433,14 @@ seleksi otomatis normal: } ``` -Gunakan perintah sesi normal untuk beralih agen dan model. `/new` membuat sesi -OpenClaw baru dan harness Codex membuat atau melanjutkan thread app-server -sidecar-nya sesuai kebutuhan. `/reset` menghapus binding sesi OpenClaw untuk -thread tersebut dan membiarkan giliran berikutnya menyelesaikan harness dari -konfigurasi saat ini lagi. +Gunakan perintah sesi normal untuk beralih agent dan model. `/new` membuat sesi +OpenClaw baru dan harness Codex membuat atau melanjutkan thread app-server sidecar +sesuai kebutuhan. `/reset` menghapus binding sesi OpenClaw untuk thread tersebut +dan memungkinkan giliran berikutnya menyelesaikan harness dari konfigurasi saat ini lagi. ## Penemuan model -Secara default, Plugin Codex meminta model yang tersedia kepada app-server. Jika +Secara default, Plugin Codex meminta app-server untuk model yang tersedia. Jika penemuan gagal atau timeout, ia menggunakan katalog fallback bawaan untuk: - GPT-5.5 @@ -478,25 +489,24 @@ menggunakan katalog fallback: ## Koneksi dan kebijakan app-server -Secara default, Plugin memulai biner Codex terkelola OpenClaw secara lokal dengan: +Secara default, Plugin memulai biner Codex yang dikelola OpenClaw secara lokal dengan: ```bash codex app-server --listen stdio:// ``` -Biner terkelola dikirim bersama paket Plugin `codex`. Ini menjaga versi app-server -tetap terikat ke Plugin bawaan alih-alih ke CLI Codex terpisah mana pun yang -kebetulan terinstal secara lokal. Tetapkan `appServer.command` hanya ketika Anda -memang ingin menjalankan executable yang berbeda. +Biner terkelola dikirim bersama paket Plugin `codex`. Ini membuat versi app-server +terikat pada Plugin bawaan alih-alih pada CLI Codex terpisah mana pun yang kebetulan +terpasang secara lokal. Tetapkan `appServer.command` hanya ketika Anda sengaja ingin +menjalankan executable yang berbeda. Secara default, OpenClaw memulai sesi harness Codex lokal dalam mode YOLO: `approvalPolicy: "never"`, `approvalsReviewer: "user"`, dan -`sandbox: "danger-full-access"`. Ini adalah postur operator lokal tepercaya yang -digunakan untuk Heartbeat otonom: Codex dapat menggunakan shell dan alat jaringan -tanpa berhenti pada prompt approval native yang tidak ada orang di sekitar untuk -menjawabnya. +`sandbox: "danger-full-access"`. Ini adalah postur operator lokal tepercaya yang digunakan +untuk Heartbeat otonom: Codex dapat menggunakan alat shell dan jaringan tanpa +berhenti pada prompt persetujuan native yang tidak ada orangnya untuk menjawab. -Untuk ikut menggunakan approval yang ditinjau guardian Codex, tetapkan `appServer.mode: +Untuk ikut menggunakan persetujuan yang ditinjau guardian Codex, tetapkan `appServer.mode: "guardian"`: ```json5 @@ -517,20 +527,18 @@ Untuk ikut menggunakan approval yang ditinjau guardian Codex, tetapkan `appServe } ``` -Mode Guardian menggunakan jalur approval auto-review native Codex. Ketika Codex -meminta untuk keluar dari sandbox, menulis di luar workspace, atau menambahkan -izin seperti akses jaringan, Codex merutekan permintaan approval tersebut ke -reviewer native alih-alih prompt manusia. Reviewer menerapkan kerangka risiko -Codex dan menyetujui atau menolak permintaan spesifik tersebut. Gunakan Guardian -ketika Anda menginginkan guardrail lebih banyak daripada mode YOLO tetapi tetap -membutuhkan agen tanpa pengawasan untuk terus berjalan. +Mode Guardian menggunakan jalur persetujuan auto-review native Codex. Ketika Codex meminta +keluar dari sandbox, menulis di luar workspace, atau menambahkan izin seperti akses jaringan, +Codex merutekan permintaan persetujuan tersebut ke peninjau native alih-alih prompt manusia. +Peninjau menerapkan kerangka risiko Codex dan menyetujui atau menolak permintaan spesifik +tersebut. Gunakan Guardian ketika Anda menginginkan pagar pengaman lebih banyak daripada mode +YOLO tetapi tetap membutuhkan agent tanpa pengawasan untuk terus berjalan. Preset `guardian` diperluas menjadi `approvalPolicy: "on-request"`, `approvalsReviewer: "auto_review"`, dan `sandbox: "workspace-write"`. -Field kebijakan individual tetap mengesampingkan `mode`, sehingga deployment -lanjutan dapat mencampur preset dengan pilihan eksplisit. Nilai reviewer -`guardian_subagent` yang lebih lama masih diterima sebagai alias kompatibilitas, -tetapi konfigurasi baru sebaiknya menggunakan `auto_review`. +Field kebijakan individual tetap menimpa `mode`, sehingga deployment lanjutan dapat mencampur +preset dengan pilihan eksplisit. Nilai peninjau lama `guardian_subagent` masih diterima sebagai +alias kompatibilitas, tetapi konfigurasi baru sebaiknya menggunakan `auto_review`. Untuk app-server yang sudah berjalan, gunakan transport WebSocket: @@ -554,49 +562,48 @@ Untuk app-server yang sudah berjalan, gunakan transport WebSocket: } ``` -Peluncuran app-server stdio mewarisi environment proses OpenClaw secara default, -tetapi OpenClaw memiliki bridge akun app-server Codex dan menetapkan baik -`CODEX_HOME` maupun `HOME` ke direktori per agen di bawah state OpenClaw agen -tersebut. Loader skill milik Codex membaca `$CODEX_HOME/skills` dan -`$HOME/.agents/skills`, sehingga kedua nilai diisolasi untuk peluncuran -app-server lokal. Ini menjaga skills native Codex, plugins, konfigurasi, akun, -dan status thread tetap tercakup pada agen OpenClaw alih-alih bocor dari home -CLI Codex pribadi operator. +Peluncuran app-server stdio mewarisi lingkungan proses OpenClaw secara default, +tetapi OpenClaw memiliki bridge akun app-server Codex dan menetapkan +`CODEX_HOME` serta `HOME` ke direktori per-agent di bawah status OpenClaw agent tersebut. +Loader skill milik Codex membaca `$CODEX_HOME/skills` dan +`$HOME/.agents/skills`, sehingga kedua nilai diisolasi untuk peluncuran app-server +lokal. Itu membuat skills, plugins, konfigurasi, akun, dan status thread native Codex +tetap terscope ke agent OpenClaw alih-alih bocor dari home CLI Codex pribadi operator. -Plugin OpenClaw dan snapshot skill OpenClaw tetap mengalir melalui registry -Plugin dan loader skill milik OpenClaw. Aset CLI Codex pribadi tidak. Jika Anda -memiliki skills atau plugins CLI Codex yang berguna dan seharusnya menjadi bagian -dari agen OpenClaw, inventarisasi secara eksplisit: +Plugin OpenClaw dan snapshot skill OpenClaw tetap mengalir melalui registry Plugin dan +loader skill milik OpenClaw sendiri. Aset CLI Codex pribadi tidak. Jika Anda memiliki +skills atau plugins CLI Codex yang berguna dan seharusnya menjadi bagian dari agent OpenClaw, +inventariskan secara eksplisit: ```bash openclaw migrate codex --dry-run openclaw migrate apply codex --yes ``` -Penyedia migrasi Codex menyalin skills ke workspace agen OpenClaw saat ini. -Plugins, hooks, dan file konfigurasi native Codex dilaporkan atau diarsipkan untuk -review manual alih-alih diaktifkan otomatis, karena mereka dapat mengeksekusi -perintah, mengekspos server MCP, atau membawa kredensial. +Penyedia migrasi Codex menyalin skills ke workspace agent OpenClaw saat ini. +Plugin native Codex, hook, dan file konfigurasi dilaporkan atau diarsipkan +untuk peninjauan manual alih-alih diaktifkan secara otomatis, karena dapat +menjalankan perintah, mengekspos server MCP, atau membawa kredensial. -Auth dipilih dalam urutan ini: +Autentikasi dipilih dalam urutan ini: -1. Profil auth Codex OpenClaw eksplisit untuk agen. -2. Akun app-server yang sudah ada di home Codex agen tersebut. +1. Profil autentikasi Codex OpenClaw eksplisit untuk agent. +2. Akun app-server yang sudah ada di home Codex agent tersebut. 3. Hanya untuk peluncuran app-server stdio lokal, `CODEX_API_KEY`, lalu - `OPENAI_API_KEY`, ketika tidak ada akun app-server dan auth OpenAI masih - diperlukan. + `OPENAI_API_KEY`, ketika tidak ada akun app-server dan autentikasi OpenAI + masih diperlukan. -Ketika OpenClaw melihat profil auth Codex bergaya langganan ChatGPT, ia menghapus -`CODEX_API_KEY` dan `OPENAI_API_KEY` dari proses child Codex yang di-spawn. Ini -menjaga kunci API tingkat Gateway tetap tersedia untuk embeddings atau model -OpenAI langsung tanpa membuat giliran app-server Codex native secara tidak sengaja -ditagihkan melalui API. Profil kunci API Codex eksplisit dan fallback env-key -stdio lokal menggunakan login app-server alih-alih env proses child yang diwarisi. -Koneksi app-server WebSocket tidak menerima fallback kunci API env Gateway; -gunakan profil auth eksplisit atau akun milik app-server jarak jauh. +Ketika OpenClaw melihat profil autentikasi Codex bergaya langganan ChatGPT, ia menghapus +`CODEX_API_KEY` dan `OPENAI_API_KEY` dari proses turunan Codex yang di-spawn. Itu +membuat kunci API tingkat Gateway tetap tersedia untuk embeddings atau model OpenAI langsung +tanpa membuat giliran app-server Codex native tertagih melalui API secara tidak sengaja. +Profil kunci API Codex eksplisit dan fallback kunci env stdio lokal menggunakan login app-server +alih-alih env proses turunan yang diwariskan. Koneksi app-server WebSocket +tidak menerima fallback kunci API env Gateway; gunakan profil autentikasi eksplisit atau akun +milik app-server jarak jauh sendiri. -Jika deployment membutuhkan isolasi environment tambahan, tambahkan variabel -tersebut ke `appServer.clearEnv`: +Jika deployment membutuhkan isolasi lingkungan tambahan, tambahkan variabel tersebut ke +`appServer.clearEnv`: ```json5 { @@ -615,54 +622,55 @@ tersebut ke `appServer.clearEnv`: } ``` -`appServer.clearEnv` hanya memengaruhi proses child app-server Codex yang di-spawn. +`appServer.clearEnv` hanya memengaruhi proses turunan app-server Codex yang dijalankan. -Tools dinamis Codex default ke profil `native-first`. Dalam mode tersebut, -OpenClaw tidak mengekspos tools dinamis yang menduplikasi operasi workspace -native Codex: `read`, `write`, `edit`, `apply_patch`, `exec`, `process`, dan -`update_plan`. Tools integrasi OpenClaw seperti messaging, sessions, media, -Cron, browser, nodes, Gateway, `heartbeat_respond`, dan `web_search` tetap +Dynamic tools Codex secara default menggunakan profil `native-first`. Dalam mode itu, +OpenClaw tidak mengekspos dynamic tools yang menduplikasi operasi workspace native Codex: +`read`, `write`, `edit`, `apply_patch`, `exec`, `process`, dan +`update_plan`. Alat integrasi OpenClaw seperti messaging, sessions, media, +cron, browser, nodes, gateway, `heartbeat_respond`, dan `web_search` tetap tersedia. Bidang Plugin Codex tingkat atas yang didukung: -| Bidang | Nilai default | Makna | -| -------------------------- | ---------------- | ------------------------------------------------------------------------------------------------------ | -| `codexDynamicToolsProfile` | `"native-first"` | Gunakan `"openclaw-compat"` untuk mengekspos set lengkap alat dinamis OpenClaw ke app-server Codex. | -| `codexDynamicToolsExclude` | `[]` | Nama alat dinamis OpenClaw tambahan yang dihilangkan dari giliran app-server Codex. | +| Bidang | Bawaan | Makna | +| -------------------------- | ---------------- | -------------------------------------------------------------------------------------------------- | +| `codexDynamicToolsProfile` | `"native-first"` | Gunakan `"openclaw-compat"` untuk mengekspos set dynamic tool OpenClaw lengkap ke app-server Codex. | +| `codexDynamicToolsExclude` | `[]` | Nama dynamic tool OpenClaw tambahan yang dihilangkan dari giliran app-server Codex. | Bidang `appServer` yang didukung: -| Bidang | Nilai default | Makna | -| ------------------- | ---------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `transport` | `"stdio"` | `"stdio"` memunculkan Codex; `"websocket"` terhubung ke `url`. | -| `command` | biner Codex terkelola | Berkas yang dapat dieksekusi untuk transport stdio. Biarkan tidak diatur untuk menggunakan biner terkelola; atur hanya untuk penimpaan eksplisit. | -| `args` | `["app-server", "--listen", "stdio://"]` | Argumen untuk transport stdio. | -| `url` | tidak diatur | URL app-server WebSocket. | -| `authToken` | tidak diatur | Token Bearer untuk transport WebSocket. | -| `headers` | `{}` | Header WebSocket tambahan. | -| `clearEnv` | `[]` | Nama variabel lingkungan tambahan yang dihapus dari proses app-server stdio yang dimunculkan setelah OpenClaw membangun lingkungan warisannya. `CODEX_HOME` dan `HOME` dicadangkan untuk isolasi Codex per agen milik OpenClaw pada peluncuran lokal. | -| `requestTimeoutMs` | `60000` | Tenggat waktu untuk panggilan bidang kendali app-server. | -| `mode` | `"yolo"` | Prasetel untuk eksekusi YOLO atau yang ditinjau guardian. | -| `approvalPolicy` | `"never"` | Kebijakan persetujuan Codex native yang dikirim ke mulai/lanjutkan/giliran thread. | -| `sandbox` | `"danger-full-access"` | Mode sandbox Codex native yang dikirim ke mulai/lanjutkan thread. | -| `approvalsReviewer` | `"user"` | Gunakan `"auto_review"` agar Codex meninjau prompt persetujuan native. `guardian_subagent` tetap menjadi alias lama. | -| `serviceTier` | tidak diatur | Tingkat layanan app-server Codex opsional: `"fast"`, `"flex"`, atau `null`. Nilai lama yang tidak valid diabaikan. | +| Bidang | Bawaan | Makna | +| ------------------- | ---------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `transport` | `"stdio"` | `"stdio"` menjalankan Codex; `"websocket"` terhubung ke `url`. | +| `command` | biner Codex terkelola | Executable untuk transport stdio. Biarkan tidak disetel untuk menggunakan biner terkelola; setel hanya untuk override eksplisit. | +| `args` | `["app-server", "--listen", "stdio://"]` | Argumen untuk transport stdio. | +| `url` | tidak disetel | URL app-server WebSocket. | +| `authToken` | tidak disetel | Token Bearer untuk transport WebSocket. | +| `headers` | `{}` | Header WebSocket tambahan. | +| `clearEnv` | `[]` | Nama variabel lingkungan tambahan yang dihapus dari proses app-server stdio yang dijalankan setelah OpenClaw membangun lingkungan warisannya. `CODEX_HOME` dan `HOME` dicadangkan untuk isolasi Codex per-agent OpenClaw pada peluncuran lokal. | +| `requestTimeoutMs` | `60000` | Timeout untuk panggilan control-plane app-server. | +| `mode` | `"yolo"` | Preset untuk eksekusi YOLO atau yang ditinjau guardian. | +| `approvalPolicy` | `"never"` | Kebijakan persetujuan native Codex yang dikirim ke thread start/resume/turn. | +| `sandbox` | `"danger-full-access"` | Mode sandbox native Codex yang dikirim ke thread start/resume. | +| `approvalsReviewer` | `"user"` | Gunakan `"auto_review"` agar Codex meninjau prompt persetujuan native. `guardian_subagent` tetap menjadi alias lama. | +| `serviceTier` | tidak disetel | Tingkat layanan app-server Codex opsional: `"fast"`, `"flex"`, atau `null`. Nilai lama yang tidak valid diabaikan. | -Panggilan alat dinamis milik OpenClaw dibatasi secara independen dari -`appServer.requestTimeoutMs`: setiap permintaan `item/tool/call` Codex harus menerima -respons OpenClaw dalam 30 detik. Saat tenggat habis, OpenClaw membatalkan sinyal -alat jika didukung dan mengembalikan respons alat dinamis yang gagal ke Codex agar -giliran dapat berlanjut, bukan membiarkan sesi tetap dalam `processing`. +Panggilan dynamic tool yang dimiliki OpenClaw dibatasi secara independen dari +`appServer.requestTimeoutMs`: setiap permintaan `item/tool/call` Codex harus +menerima respons OpenClaw dalam 30 detik. Saat timeout, OpenClaw membatalkan +sinyal alat jika didukung dan mengembalikan respons dynamic-tool yang gagal ke +Codex agar giliran dapat berlanjut alih-alih membiarkan sesi dalam status +`processing`. -Setelah OpenClaw merespons permintaan app-server bercakupan giliran Codex, harness -juga mengharapkan Codex menyelesaikan giliran native dengan `turn/completed`. Jika -app-server tidak merespons selama 60 detik setelah respons tersebut, OpenClaw sebisa mungkin -menginterupsi giliran Codex, mencatat tenggat waktu diagnostik, dan melepaskan -jalur sesi OpenClaw agar pesan obrolan lanjutan tidak mengantre di belakang giliran -native yang sudah basi. +Setelah OpenClaw merespons permintaan app-server dengan cakupan giliran Codex, +harness juga mengharapkan Codex menyelesaikan giliran native dengan +`turn/completed`. Jika app-server diam selama 60 detik setelah respons itu, +OpenClaw melakukan interrupt best-effort pada giliran Codex, mencatat timeout +diagnostik, dan melepaskan lane sesi OpenClaw agar pesan chat lanjutan tidak +mengantre di belakang giliran native yang kedaluwarsa. -Penimpaan lingkungan tetap tersedia untuk pengujian lokal: +Override lingkungan tetap tersedia untuk pengujian lokal: - `OPENCLAW_CODEX_APP_SERVER_BIN` - `OPENCLAW_CODEX_APP_SERVER_ARGS` @@ -671,30 +679,30 @@ Penimpaan lingkungan tetap tersedia untuk pengujian lokal: - `OPENCLAW_CODEX_APP_SERVER_SANDBOX` `OPENCLAW_CODEX_APP_SERVER_BIN` melewati biner terkelola saat -`appServer.command` tidak diatur. +`appServer.command` tidak disetel. `OPENCLAW_CODEX_APP_SERVER_GUARDIAN=1` telah dihapus. Gunakan `plugins.entries.codex.config.appServer.mode: "guardian"` sebagai gantinya, atau -`OPENCLAW_CODEX_APP_SERVER_MODE=guardian` untuk pengujian lokal sekali pakai. Konfigurasi -lebih disarankan untuk deployment yang dapat diulang karena menjaga perilaku Plugin dalam -berkas yang ditinjau sama seperti sisa penyiapan harness Codex. +`OPENCLAW_CODEX_APP_SERVER_MODE=guardian` untuk pengujian lokal sekali pakai. Config +lebih disukai untuk deployment yang dapat diulang karena menjaga perilaku plugin +dalam file yang sama-sama ditinjau seperti bagian lain dari penyiapan harness Codex. ## Penggunaan komputer -Computer Use dibahas dalam panduan penyiapannya sendiri: -[Codex Computer Use](/id/plugins/codex-computer-use). +Penggunaan Komputer dibahas dalam panduan penyiapannya sendiri: +[Penggunaan Komputer Codex](/id/plugins/codex-computer-use). -Versi singkatnya: OpenClaw tidak menyertakan aplikasi kendali desktop atau menjalankan -tindakan desktop sendiri. OpenClaw menyiapkan app-server Codex, memverifikasi bahwa -server MCP `computer-use` tersedia, lalu membiarkan Codex menangani panggilan alat -MCP native selama giliran mode Codex. +Versi singkatnya: OpenClaw tidak mem-vendor aplikasi kontrol desktop atau menjalankan +aksi desktop sendiri. OpenClaw menyiapkan app-server Codex, memverifikasi bahwa server MCP +`computer-use` tersedia, lalu membiarkan Codex menangani panggilan alat MCP native +selama giliran mode Codex. Untuk akses driver TryCua langsung di luar alur marketplace Codex, daftarkan `cua-driver mcp` dengan `openclaw mcp set cua-driver '{"command":"cua-driver","args":["mcp"]}'`. -Lihat [Codex Computer Use](/id/plugins/codex-computer-use) untuk perbedaan -antara Computer Use milik Codex dan pendaftaran MCP langsung. +Lihat [Penggunaan Komputer Codex](/id/plugins/codex-computer-use) untuk perbedaan +antara Penggunaan Komputer yang dimiliki Codex dan pendaftaran MCP langsung. -Konfigurasi minimal: +Config minimal: ```json5 { @@ -722,30 +730,30 @@ Konfigurasi minimal: } ``` -Penyiapan dapat diperiksa atau dipasang dari permukaan perintah: +Penyiapan dapat diperiksa atau diinstal dari command surface: - `/codex computer-use status` - `/codex computer-use install` - `/codex computer-use install --source ` - `/codex computer-use install --marketplace-path ` -Computer Use bersifat khusus macOS dan mungkin memerlukan izin OS lokal sebelum -server MCP Codex dapat mengendalikan aplikasi. Jika `computerUse.enabled` bernilai true dan server MCP -tidak tersedia, giliran mode Codex gagal sebelum thread dimulai, bukan berjalan -diam-diam tanpa alat Computer Use native. Lihat -[Codex Computer Use](/id/plugins/codex-computer-use) untuk pilihan marketplace, +Penggunaan Komputer bersifat khusus macOS dan mungkin memerlukan izin OS lokal sebelum +server MCP Codex dapat mengontrol aplikasi. Jika `computerUse.enabled` bernilai true dan server MCP +tidak tersedia, giliran mode Codex gagal sebelum thread dimulai alih-alih +berjalan diam-diam tanpa alat Penggunaan Komputer native. Lihat +[Penggunaan Komputer Codex](/id/plugins/codex-computer-use) untuk pilihan marketplace, batas katalog jarak jauh, alasan status, dan pemecahan masalah. Saat `computerUse.autoInstall` bernilai true, OpenClaw dapat mendaftarkan marketplace -Codex Desktop bundel standar dari +Codex Desktop standar yang dibundel dari `/Applications/Codex.app/Contents/Resources/plugins/openai-bundled` jika Codex belum menemukan marketplace lokal. Gunakan `/new` atau `/reset` setelah -mengubah konfigurasi runtime atau Computer Use agar sesi yang ada tidak mempertahankan -pengikatan PI atau thread Codex lama. +mengubah runtime atau config Penggunaan Komputer agar sesi yang ada tidak menyimpan +binding PI atau thread Codex lama. ## Resep umum -Codex lokal dengan transport stdio default: +Codex lokal dengan transport stdio bawaan: ```json5 { @@ -826,253 +834,250 @@ App-server jarak jauh dengan header eksplisit: } ``` -Peralihan model tetap dikendalikan OpenClaw. Saat sesi OpenClaw dilampirkan -ke thread Codex yang ada, giliran berikutnya mengirim model OpenAI, -penyedia, kebijakan persetujuan, sandbox, dan tingkat layanan yang saat ini dipilih ke -app-server lagi. Beralih dari `openai/gpt-5.5` ke `openai/gpt-5.2` mempertahankan -pengikatan thread tetapi meminta Codex melanjutkan dengan model yang baru dipilih. +Pergantian model tetap dikendalikan OpenClaw. Saat sesi OpenClaw dilampirkan +ke thread Codex yang sudah ada, giliran berikutnya mengirim model OpenAI, +provider, kebijakan persetujuan, sandbox, dan tingkat layanan yang saat ini dipilih +ke app-server lagi. Beralih dari `openai/gpt-5.5` ke `openai/gpt-5.2` mempertahankan +binding thread tetapi meminta Codex untuk melanjutkan dengan model yang baru dipilih. ## Perintah Codex -Plugin bundel mendaftarkan `/codex` sebagai perintah garis miring yang diotorisasi. Perintah ini -bersifat generik dan berfungsi pada channel apa pun yang mendukung perintah teks OpenClaw. +Plugin yang dibundel mendaftarkan `/codex` sebagai slash command yang diotorisasi. Perintah ini +generik dan berfungsi pada channel apa pun yang mendukung perintah teks OpenClaw. Bentuk umum: -- `/codex status` menampilkan konektivitas app-server langsung, model, akun, batas laju, server MCP, dan Skills. -- `/codex models` mencantumkan model app-server Codex langsung. +- `/codex status` menampilkan konektivitas server aplikasi langsung, model, akun, batas laju, server MCP, dan skills. +- `/codex models` mencantumkan model server aplikasi Codex langsung. - `/codex threads [filter]` mencantumkan thread Codex terbaru. -- `/codex resume ` melampirkan sesi OpenClaw saat ini ke thread Codex yang ada. -- `/codex compact` meminta app-server Codex memadatkan thread yang dilampirkan. -- `/codex review` memulai peninjauan native Codex untuk thread yang dilampirkan. -- `/codex diagnostics [note]` meminta konfirmasi sebelum mengirim umpan balik diagnostik Codex untuk thread yang dilampirkan. +- `/codex resume ` melampirkan sesi OpenClaw saat ini ke thread Codex yang sudah ada. +- `/codex compact` meminta server aplikasi Codex untuk memadatkan thread yang terlampir. +- `/codex review` memulai peninjauan native Codex untuk thread yang terlampir. +- `/codex diagnostics [note]` meminta persetujuan sebelum mengirim umpan balik diagnostik Codex untuk thread yang terlampir. - `/codex computer-use status` memeriksa Plugin Computer Use dan server MCP yang dikonfigurasi. - `/codex computer-use install` memasang Plugin Computer Use yang dikonfigurasi dan memuat ulang server MCP. - `/codex account` menampilkan status akun dan batas laju. -- `/codex mcp` mencantumkan status server MCP app-server Codex. -- `/codex skills` mencantumkan skills app-server Codex. +- `/codex mcp` mencantumkan status server MCP server aplikasi Codex. +- `/codex skills` mencantumkan skills server aplikasi Codex. ### Alur kerja debugging umum -Saat agen yang didukung Codex melakukan sesuatu yang mengejutkan di Telegram, Discord, Slack, -atau channel lain, mulai dengan percakapan tempat masalah terjadi: +Ketika agen berbasis Codex melakukan sesuatu yang mengejutkan di Telegram, Discord, Slack, +atau saluran lain, mulailah dari percakapan tempat masalah terjadi: 1. Jalankan `/diagnostics bad tool choice after image upload` atau catatan singkat lain yang menjelaskan apa yang Anda lihat. 2. Setujui permintaan diagnostik sekali. Persetujuan membuat zip diagnostik Gateway - lokal dan, karena sesi menggunakan harness Codex, juga mengirim bundle umpan balik - Codex yang relevan ke server OpenAI. -3. Salin balasan diagnostik yang selesai ke laporan bug atau utas dukungan. - Balasan itu mencakup path bundle lokal, ringkasan privasi, id sesi OpenClaw, - id utas Codex, dan baris `Inspect locally` untuk setiap utas Codex. -4. Jika Anda ingin men-debug run tersebut sendiri, jalankan perintah `Inspect locally` + lokal dan, karena sesi menggunakan harness Codex, juga mengirim + bundel umpan balik Codex yang relevan ke server OpenAI. +3. Salin balasan diagnostik yang selesai ke laporan bug atau thread dukungan. + Balasan itu menyertakan path bundel lokal, ringkasan privasi, id sesi OpenClaw, + id thread Codex, dan baris `Inspect locally` untuk setiap thread Codex. +4. Jika Anda ingin men-debug run sendiri, jalankan perintah `Inspect locally` yang dicetak di terminal. Bentuknya seperti `codex resume ` dan membuka - utas Codex native sehingga Anda dapat memeriksa percakapan, melanjutkannya secara lokal, + thread native Codex sehingga Anda dapat memeriksa percakapan, melanjutkannya secara lokal, atau bertanya kepada Codex mengapa ia memilih alat atau rencana tertentu. Gunakan `/codex diagnostics [note]` hanya ketika Anda secara khusus menginginkan unggahan -umpan balik Codex untuk utas yang saat ini terlampir tanpa bundle diagnostik Gateway -OpenClaw lengkap. Untuk sebagian besar laporan dukungan, `/diagnostics [note]` adalah -titik awal yang lebih baik karena mengikat status Gateway lokal dan id utas Codex -bersama dalam satu balasan. Lihat [Ekspor diagnostik](/id/gateway/diagnostics) +umpan balik Codex untuk thread yang saat ini terlampir tanpa bundel diagnostik +Gateway OpenClaw lengkap. Untuk sebagian besar laporan dukungan, `/diagnostics [note]` +adalah titik awal yang lebih baik karena mengaitkan status Gateway lokal dan id +thread Codex dalam satu balasan. Lihat [Ekspor diagnostik](/id/gateway/diagnostics) untuk model privasi lengkap dan perilaku chat grup. -Core OpenClaw juga mengekspos `/diagnostics [note]` khusus owner sebagai perintah -diagnostik Gateway umum. Prompt persetujuannya menampilkan pembuka data sensitif, +Core OpenClaw juga mengekspos `/diagnostics [note]` khusus pemilik sebagai perintah +diagnostik Gateway umum. Prompt persetujuannya menampilkan mukadimah data sensitif, menautkan ke [Ekspor Diagnostik](/id/gateway/diagnostics), dan meminta -`openclaw gateway diagnostics export --json` melalui persetujuan exec eksplisit -setiap kali. Jangan setujui diagnostik dengan aturan izinkan-semua. Setelah persetujuan, -OpenClaw mengirim laporan yang dapat ditempel dengan path bundle lokal dan ringkasan +`openclaw gateway diagnostics export --json` melalui persetujuan eksekusi eksplisit +setiap kali. Jangan setujui diagnostik dengan aturan izinkan semua. Setelah disetujui, +OpenClaw mengirim laporan yang dapat ditempel dengan path bundel lokal dan ringkasan manifest. Ketika sesi OpenClaw aktif menggunakan harness Codex, persetujuan yang -sama juga mengotorisasi pengiriman bundle umpan balik Codex yang relevan ke -server OpenAI. Prompt persetujuan menyatakan bahwa umpan balik Codex akan dikirim, tetapi -tidak mencantumkan id sesi atau utas Codex sebelum persetujuan. +sama juga mengotorisasi pengiriman bundel umpan balik Codex yang relevan ke +server OpenAI. Prompt persetujuan mengatakan bahwa umpan balik Codex akan dikirim, tetapi +tidak mencantumkan id sesi atau thread Codex sebelum persetujuan. -Jika `/diagnostics` dipanggil oleh owner dalam chat grup, OpenClaw menjaga kanal -bersama tetap bersih: grup hanya menerima pemberitahuan singkat, sementara -pembuka diagnostik, prompt persetujuan, dan id sesi/utas Codex dikirim ke -owner melalui rute persetujuan privat. Jika tidak ada rute owner privat, -OpenClaw menolak permintaan grup dan meminta owner menjalankannya dari DM. +Jika `/diagnostics` dipanggil oleh pemilik dalam chat grup, OpenClaw menjaga +saluran bersama tetap bersih: grup hanya menerima pemberitahuan singkat, sementara +mukadimah diagnostik, prompt persetujuan, dan id sesi/thread Codex dikirim ke +pemilik melalui rute persetujuan privat. Jika tidak ada rute pemilik privat, +OpenClaw menolak permintaan grup dan meminta pemilik menjalankannya dari DM. -Unggahan Codex yang disetujui memanggil `feedback/upload` app-server Codex dan meminta -app-server menyertakan log untuk setiap utas yang tercantum dan subutas Codex yang dibuat -bila tersedia. Unggahan melewati jalur umpan balik normal Codex ke server OpenAI; -jika umpan balik Codex dinonaktifkan di app-server tersebut, perintah mengembalikan -error app-server. Balasan diagnostik yang selesai mencantumkan kanal, -id sesi OpenClaw, id utas Codex, dan perintah lokal `codex resume ` -untuk utas yang dikirim. Jika Anda menolak atau mengabaikan persetujuan, +Unggahan Codex yang disetujui memanggil server aplikasi Codex `feedback/upload` dan meminta +server aplikasi menyertakan log untuk setiap thread yang dicantumkan dan subthread Codex +yang dibuat saat tersedia. Unggahan berjalan melalui jalur umpan balik normal Codex ke +server OpenAI; jika umpan balik Codex dinonaktifkan di server aplikasi tersebut, perintah +mengembalikan kesalahan server aplikasi. Balasan diagnostik yang selesai mencantumkan saluran, +id sesi OpenClaw, id thread Codex, dan perintah lokal `codex resume ` +untuk thread yang dikirim. Jika Anda menolak atau mengabaikan persetujuan, OpenClaw tidak mencetak id Codex tersebut. Unggahan ini tidak menggantikan ekspor diagnostik Gateway lokal. -`/codex resume` menulis file binding sidecar yang sama yang digunakan harness untuk -giliran normal. Pada pesan berikutnya, OpenClaw melanjutkan utas Codex tersebut, meneruskan -model OpenClaw yang saat ini dipilih ke app-server, dan tetap mengaktifkan histori -diperluas. +`/codex resume` menulis file pengikatan sidecar yang sama dengan yang digunakan harness untuk +turn normal. Pada pesan berikutnya, OpenClaw melanjutkan thread Codex tersebut, meneruskan +model OpenClaw yang saat ini dipilih ke server aplikasi, dan menjaga riwayat diperluas +tetap aktif. -### Periksa utas Codex dari CLI +### Memeriksa thread Codex dari CLI -Cara tercepat untuk memahami run Codex yang buruk sering kali adalah membuka utas Codex -native secara langsung: +Cara tercepat untuk memahami run Codex yang buruk sering kali adalah membuka thread +native Codex secara langsung: ```sh codex resume ``` -Gunakan ini ketika Anda melihat bug dalam percakapan kanal dan ingin memeriksa sesi -Codex yang bermasalah, melanjutkannya secara lokal, atau bertanya kepada Codex mengapa ia -membuat pilihan alat atau penalaran tertentu. Jalur termudah biasanya menjalankan -`/diagnostics [note]` terlebih dahulu: setelah Anda menyetujuinya, laporan yang selesai -mencantumkan setiap utas Codex dan mencetak perintah `Inspect locally`, misalnya +Gunakan ini ketika Anda melihat bug dalam percakapan saluran dan ingin memeriksa +sesi Codex yang bermasalah, melanjutkannya secara lokal, atau bertanya kepada Codex mengapa ia membuat +pilihan alat atau penalaran tertentu. Jalur termudah biasanya menjalankan +`/diagnostics [note]` terlebih dahulu: setelah Anda menyetujuinya, laporan yang selesai mencantumkan +setiap thread Codex dan mencetak perintah `Inspect locally`, misalnya `codex resume `. Anda dapat menyalin perintah itu langsung ke terminal. -Anda juga dapat memperoleh id utas dari `/codex binding` untuk chat saat ini atau -`/codex threads [filter]` untuk utas app-server Codex terbaru, lalu menjalankan perintah +Anda juga dapat memperoleh id thread dari `/codex binding` untuk chat saat ini atau +`/codex threads [filter]` untuk thread server aplikasi Codex terbaru, lalu menjalankan perintah `codex resume` yang sama di shell Anda. -Permukaan perintah memerlukan app-server Codex `0.125.0` atau yang lebih baru. Metode +Permukaan perintah memerlukan server aplikasi Codex `0.125.0` atau yang lebih baru. Metode kontrol individual dilaporkan sebagai `unsupported by this Codex app-server` jika -app-server masa depan atau kustom tidak mengekspos metode JSON-RPC tersebut. +server aplikasi masa depan atau kustom tidak mengekspos metode JSON-RPC tersebut. ## Batas hook Harness Codex memiliki tiga lapisan hook: -| Lapisan | Owner | Tujuan | +| Lapisan | Pemilik | Tujuan | | ------------------------------------- | ------------------------ | ------------------------------------------------------------------- | -| Hook plugin OpenClaw | OpenClaw | Kompatibilitas produk/plugin di seluruh harness PI dan Codex. | -| Middleware ekstensi app-server Codex | Plugin bundel OpenClaw | Perilaku adapter per giliran di sekitar alat dinamis OpenClaw. | +| Hook Plugin OpenClaw | OpenClaw | Kompatibilitas produk/Plugin di seluruh harness PI dan Codex. | +| Middleware ekstensi server aplikasi Codex | Plugin bundel OpenClaw | Perilaku adapter per turn di sekitar alat dinamis OpenClaw. | | Hook native Codex | Codex | Siklus hidup Codex tingkat rendah dan kebijakan alat native dari konfigurasi Codex. | OpenClaw tidak menggunakan file `hooks.json` Codex proyek atau global untuk merutekan -perilaku plugin OpenClaw. Untuk bridge alat native dan izin yang didukung, -OpenClaw menyuntikkan konfigurasi Codex per utas untuk `PreToolUse`, `PostToolUse`, +perilaku Plugin OpenClaw. Untuk alat native dan bridge izin yang didukung, +OpenClaw menyuntikkan konfigurasi Codex per thread untuk `PreToolUse`, `PostToolUse`, `PermissionRequest`, dan `Stop`. Hook Codex lain seperti `SessionStart` dan -`UserPromptSubmit` tetap menjadi kontrol tingkat Codex; keduanya tidak diekspos sebagai -hook plugin OpenClaw dalam kontrak v1. +`UserPromptSubmit` tetap menjadi kontrol tingkat Codex; hook tersebut tidak diekspos sebagai +hook Plugin OpenClaw dalam kontrak v1. -Untuk alat dinamis OpenClaw, OpenClaw mengeksekusi alat setelah Codex meminta -panggilan, sehingga OpenClaw menjalankan perilaku plugin dan middleware yang dimilikinya -di adapter harness. Untuk alat native Codex, Codex memiliki catatan alat kanonis. -OpenClaw dapat mencerminkan event terpilih, tetapi tidak dapat menulis ulang utas -Codex native kecuali Codex mengekspos operasi itu melalui app-server atau callback hook -native. +Untuk alat dinamis OpenClaw, OpenClaw menjalankan alat setelah Codex meminta +panggilan, sehingga OpenClaw memicu perilaku Plugin dan middleware yang dimilikinya di +adapter harness. Untuk alat native Codex, Codex memiliki catatan alat kanonis. +OpenClaw dapat mencerminkan peristiwa terpilih, tetapi tidak dapat menulis ulang thread native Codex +kecuali Codex mengekspos operasi tersebut melalui server aplikasi atau callback hook native. -Proyeksi siklus hidup Compaction dan LLM berasal dari notifikasi app-server Codex -dan status adapter OpenClaw, bukan perintah hook native Codex. Event -`before_compaction`, `after_compaction`, `llm_input`, dan `llm_output` OpenClaw -adalah observasi tingkat adapter, bukan tangkapan byte-demi-byte dari request internal -atau payload compaction Codex. +Proyeksi siklus hidup Compaction dan LLM berasal dari notifikasi server aplikasi Codex +dan status adapter OpenClaw, bukan perintah hook native Codex. Peristiwa +`before_compaction`, `after_compaction`, `llm_input`, dan +`llm_output` OpenClaw adalah observasi tingkat adapter, bukan tangkapan byte-per-byte +dari permintaan internal atau payload Compaction Codex. -Notifikasi app-server `hook/started` dan `hook/completed` native Codex diproyeksikan -sebagai event agen `codex_app_server.hook` untuk trajectory dan debugging. -Keduanya tidak memanggil hook plugin OpenClaw. +Notifikasi server aplikasi `hook/started` dan `hook/completed` native Codex +diproyeksikan sebagai peristiwa agen `codex_app_server.hook` untuk lintasan dan debugging. +Notifikasi tersebut tidak memanggil hook Plugin OpenClaw. ## Kontrak dukungan V1 -Mode Codex bukan PI dengan panggilan model yang berbeda di bawahnya. Codex memiliki lebih -banyak bagian dari loop model native, dan OpenClaw mengadaptasi permukaan plugin dan -sesi di sekitar batas tersebut. +Mode Codex bukan PI dengan panggilan model berbeda di bawahnya. Codex memiliki lebih banyak bagian +dari loop model native, dan OpenClaw mengadaptasi permukaan Plugin dan sesinya +di sekitar batas tersebut. Didukung dalam runtime Codex v1: -| Permukaan | Dukungan | Alasan | -| --------------------------------------------- | --------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| Loop model OpenAI melalui Codex | Didukung | App-server Codex memiliki giliran OpenAI, resume utas native, dan kelanjutan alat native. | -| Routing dan pengiriman kanal OpenClaw | Didukung | Telegram, Discord, Slack, WhatsApp, iMessage, dan kanal lain tetap berada di luar runtime model. | -| Alat dinamis OpenClaw | Didukung | Codex meminta OpenClaw mengeksekusi alat ini, sehingga OpenClaw tetap berada di jalur eksekusi. | -| Plugin prompt dan konteks | Didukung | OpenClaw membangun overlay prompt dan memproyeksikan konteks ke giliran Codex sebelum memulai atau melanjutkan utas. | -| Siklus hidup mesin konteks | Didukung | Perakitan, ingest atau pemeliharaan setelah giliran, dan koordinasi compaction mesin konteks berjalan untuk giliran Codex. | -| Hook alat dinamis | Didukung | Middleware `before_tool_call`, `after_tool_call`, dan hasil alat berjalan di sekitar alat dinamis milik OpenClaw. | -| Hook siklus hidup | Didukung sebagai observasi adapter | `llm_input`, `llm_output`, `agent_end`, `before_compaction`, dan `after_compaction` berjalan dengan payload mode Codex yang jujur. | -| Gerbang revisi jawaban final | Didukung melalui relay hook native | `Stop` Codex direlay ke `before_agent_finalize`; `revise` meminta Codex menjalankan satu pass model lagi sebelum finalisasi. | -| Shell native, patch, dan blokir atau observasi MCP | Didukung melalui relay hook native | `PreToolUse` dan `PostToolUse` Codex direlay untuk permukaan alat native yang committed, termasuk payload MCP pada app-server Codex `0.125.0` atau yang lebih baru. Pemblokiran didukung; penulisan ulang argumen tidak. | -| Kebijakan izin native | Didukung melalui relay hook native | `PermissionRequest` Codex dapat dirutekan melalui kebijakan OpenClaw ketika runtime mengeksposnya. Jika OpenClaw tidak mengembalikan keputusan, Codex melanjutkan melalui jalur guardian normal atau persetujuan pengguna. | -| Tangkapan trajectory app-server | Didukung | OpenClaw merekam request yang dikirim ke app-server dan notifikasi app-server yang diterimanya. | +| Permukaan | Dukungan | Alasan | +| --------------------------------------------- | --------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Loop model OpenAI melalui Codex | Didukung | Server aplikasi Codex memiliki turn OpenAI, pelanjutan thread native, dan kelanjutan alat native. | +| Perutean dan pengiriman saluran OpenClaw | Didukung | Telegram, Discord, Slack, WhatsApp, iMessage, dan saluran lain tetap berada di luar runtime model. | +| Alat dinamis OpenClaw | Didukung | Codex meminta OpenClaw menjalankan alat ini, sehingga OpenClaw tetap berada di jalur eksekusi. | +| Plugin prompt dan konteks | Didukung | OpenClaw membangun overlay prompt dan memproyeksikan konteks ke turn Codex sebelum memulai atau melanjutkan thread. | +| Siklus hidup mesin konteks | Didukung | Perakitan, ingest atau pemeliharaan setelah turn, dan koordinasi Compaction mesin konteks berjalan untuk turn Codex. | +| Hook alat dinamis | Didukung | `before_tool_call`, `after_tool_call`, dan middleware hasil alat berjalan di sekitar alat dinamis milik OpenClaw. | +| Hook siklus hidup | Didukung sebagai observasi adapter | `llm_input`, `llm_output`, `agent_end`, `before_compaction`, dan `after_compaction` dipicu dengan payload mode Codex yang jujur. | +| Gate revisi jawaban akhir | Didukung melalui relay hook native | `Stop` Codex diteruskan ke `before_agent_finalize`; `revise` meminta Codex melakukan satu pass model lagi sebelum finalisasi. | +| Blokir atau amati shell, patch, dan MCP native | Didukung melalui relay hook native | `PreToolUse` dan `PostToolUse` Codex diteruskan untuk permukaan alat native yang dikomit, termasuk payload MCP pada server aplikasi Codex `0.125.0` atau yang lebih baru. Pemblokiran didukung; penulisan ulang argumen tidak. | +| Kebijakan izin native | Didukung melalui relay hook native | `PermissionRequest` Codex dapat dirutekan melalui kebijakan OpenClaw ketika runtime mengeksposnya. Jika OpenClaw tidak mengembalikan keputusan, Codex melanjutkan melalui jalur guardian atau persetujuan pengguna normalnya. | +| Penangkapan lintasan server aplikasi | Didukung | OpenClaw merekam permintaan yang dikirimnya ke server aplikasi dan notifikasi server aplikasi yang diterimanya. | Tidak didukung dalam runtime Codex v1: -| Permukaan | Batas V1 | Jalur mendatang | -| --------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | -| Mutasi argumen alat native Codex | Hook pra-alat native Codex dapat memblokir, tetapi OpenClaw tidak menulis ulang argumen alat native Codex. | Memerlukan dukungan hook/skema Codex untuk input alat pengganti. | -| Riwayat transkrip native Codex yang dapat diedit | Codex memiliki riwayat thread native kanonis. OpenClaw memiliki cermin dan dapat memproyeksikan konteks mendatang, tetapi tidak boleh memutasi internal yang tidak didukung. | Tambahkan API server aplikasi Codex eksplisit jika operasi bedah thread native diperlukan. | -| `tool_result_persist` untuk catatan alat native Codex | Hook itu mengubah penulisan transkrip milik OpenClaw, bukan catatan alat native Codex. | Dapat mencerminkan catatan yang diubah, tetapi penulisan ulang kanonis memerlukan dukungan Codex. | -| Metadata compaction native yang kaya | OpenClaw mengamati awal dan penyelesaian compaction, tetapi tidak menerima daftar disimpan/dibuang yang stabil, delta token, atau payload ringkasan. | Memerlukan peristiwa compaction Codex yang lebih kaya. | -| Intervensi compaction | Hook compaction OpenClaw saat ini berada pada tingkat notifikasi dalam mode Codex. | Tambahkan hook pra/pasca compaction Codex jika plugin perlu memveto atau menulis ulang compaction native. | -| Penangkapan permintaan API model byte demi byte | OpenClaw dapat menangkap permintaan dan notifikasi server aplikasi, tetapi core Codex membangun permintaan API OpenAI final secara internal. | Memerlukan peristiwa pelacakan permintaan model Codex atau API debug. | +| Permukaan | Batas V1 | Jalur masa depan | +| -------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| Mutasi argumen alat native | Hook pra-alat native Codex dapat memblokir, tetapi OpenClaw tidak menulis ulang argumen alat native Codex. | Memerlukan dukungan hook/skema Codex untuk input alat pengganti. | +| Riwayat transkrip native Codex yang dapat diedit | Codex memiliki riwayat thread native kanonis. OpenClaw memiliki mirror dan dapat memproyeksikan konteks mendatang, tetapi tidak boleh memutasi internal yang tidak didukung. | Tambahkan API server aplikasi Codex eksplisit jika operasi thread native diperlukan. | +| `tool_result_persist` untuk rekaman alat native Codex | Hook tersebut mentransformasi penulisan transkrip milik OpenClaw, bukan rekaman alat native Codex. | Dapat mencerminkan rekaman yang ditransformasi, tetapi penulisan ulang kanonis memerlukan dukungan Codex. | +| Metadata Compaction native yang kaya | OpenClaw mengamati awal dan selesainya Compaction, tetapi tidak menerima daftar disimpan/dibuang yang stabil, delta token, atau payload ringkasan. | Memerlukan peristiwa Compaction Codex yang lebih kaya. | +| Intervensi Compaction | Hook Compaction OpenClaw saat ini berada di tingkat notifikasi dalam mode Codex. | Tambahkan hook pra/pasca Compaction Codex jika plugin perlu memveto atau menulis ulang Compaction native. | +| Penangkapan permintaan API model byte-per-byte | OpenClaw dapat menangkap permintaan dan notifikasi server aplikasi, tetapi inti Codex membangun permintaan API OpenAI final secara internal. | Memerlukan peristiwa pelacakan permintaan model Codex atau API debug. | -## Alat, media, dan compaction +## Alat, media, dan Compaction Harness Codex hanya mengubah eksekutor agen tertanam tingkat rendah. -OpenClaw tetap membangun daftar alat dan menerima hasil alat dinamis dari -harness. Teks, gambar, video, musik, TTS, persetujuan, dan output alat pesan +OpenClaw masih membangun daftar alat dan menerima hasil alat dinamis dari +harness. Teks, gambar, video, musik, TTS, persetujuan, dan output alat perpesanan tetap melalui jalur pengiriman OpenClaw normal. -Relay hook native sengaja dibuat generik, tetapi kontrak dukungan v1 terbatas -pada jalur alat dan izin native Codex yang diuji OpenClaw. Dalam runtime Codex, -itu mencakup payload shell, patch, dan MCP `PreToolUse`, `PostToolUse`, dan -`PermissionRequest`. Jangan berasumsi setiap peristiwa hook Codex mendatang -adalah permukaan plugin OpenClaw sampai kontrak runtime menamainya. +Relay hook native sengaja dibuat generik, tetapi kontrak dukungan v1 dibatasi +pada jalur alat native Codex dan izin yang diuji OpenClaw. Dalam runtime Codex, +itu mencakup payload shell, patch, dan MCP `PreToolUse`, +`PostToolUse`, dan `PermissionRequest`. Jangan menganggap setiap peristiwa hook +Codex di masa depan sebagai permukaan plugin OpenClaw sampai kontrak runtime +menamainya. -Untuk `PermissionRequest`, OpenClaw hanya mengembalikan keputusan izinkan atau -tolak yang eksplisit saat kebijakan memutuskan. Hasil tanpa keputusan bukanlah -izin. Codex memperlakukannya sebagai tanpa keputusan hook dan meneruskannya ke -guardian atau jalur persetujuan penggunanya sendiri. +Untuk `PermissionRequest`, OpenClaw hanya mengembalikan keputusan izinkan atau tolak eksplisit +ketika kebijakan memutuskan. Hasil tanpa keputusan bukan berarti izin. Codex memperlakukannya sebagai tanpa +keputusan hook dan melanjutkan ke jalur penjaga atau persetujuan pengguna miliknya sendiri. Elisitasi persetujuan alat MCP Codex dirutekan melalui alur persetujuan plugin -OpenClaw saat Codex menandai `_meta.codex_approval_kind` sebagai -`"mcp_tool_call"`. Prompt `request_user_input` Codex dikirim kembali ke chat -asal, dan pesan tindak lanjut berikutnya yang antre menjawab permintaan server -native tersebut alih-alih diarahkan sebagai konteks tambahan. Permintaan elisitasi -MCP lainnya tetap gagal tertutup. +OpenClaw ketika Codex menandai `_meta.codex_approval_kind` sebagai +`"mcp_tool_call"`. Prompt Codex `request_user_input` dikirim kembali ke +chat asal, dan pesan tindak lanjut berikutnya yang diantrekan menjawab permintaan server +native tersebut alih-alih diarahkan sebagai konteks tambahan. Permintaan elisitasi MCP lain +tetap gagal tertutup. -Pengarahan antrean run aktif dipetakan ke `turn/steer` server aplikasi Codex. Dengan -default `messages.queue.mode: "steer"`, OpenClaw mengelompokkan pesan chat yang -antre selama jendela hening yang dikonfigurasi dan mengirimnya sebagai satu -permintaan `turn/steer` sesuai urutan kedatangan. Mode `queue` lama mengirim -permintaan `turn/steer` terpisah. Giliran ulasan Codex dan compaction manual -dapat menolak pengarahan pada giliran yang sama, dalam hal ini OpenClaw -menggunakan antrean tindak lanjut saat mode yang dipilih mengizinkan fallback. Lihat +Pengarahan antrean active-run dipetakan ke `turn/steer` server aplikasi Codex. Dengan +`messages.queue.mode: "steer"` default, OpenClaw mengelompokkan pesan chat yang diantrekan +untuk jendela senyap yang dikonfigurasi dan mengirimkannya sebagai satu permintaan `turn/steer` dalam +urutan kedatangan. Mode `queue` lama mengirim permintaan `turn/steer` terpisah. Giliran +review Codex dan Compaction manual dapat menolak pengarahan giliran yang sama, dalam hal ini +OpenClaw menggunakan antrean tindak lanjut ketika mode yang dipilih mengizinkan fallback. Lihat [Antrean pengarahan](/id/concepts/queue-steering). -Saat model yang dipilih menggunakan harness Codex, compaction thread native -didelegasikan ke server aplikasi Codex. OpenClaw menyimpan cermin transkrip untuk -riwayat kanal, pencarian, `/new`, `/reset`, dan peralihan model atau harness di -masa mendatang. Cermin tersebut mencakup prompt pengguna, teks asisten final, dan -catatan reasoning atau rencana Codex ringan saat server aplikasi memancarkannya. -Saat ini, OpenClaw hanya mencatat sinyal awal dan penyelesaian compaction native. -OpenClaw belum mengekspos ringkasan compaction yang dapat dibaca manusia atau -daftar yang dapat diaudit tentang entri mana yang disimpan Codex setelah -compaction. +Ketika model yang dipilih menggunakan harness Codex, Compaction thread native +didelegasikan ke server aplikasi Codex. OpenClaw menyimpan mirror transkrip untuk riwayat +channel, pencarian, `/new`, `/reset`, dan perpindahan model atau harness mendatang. Mirror +mencakup prompt pengguna, teks asisten final, dan rekaman penalaran atau rencana Codex +ringan ketika server aplikasi memancarkannya. Saat ini, OpenClaw hanya +merekam sinyal awal dan selesainya Compaction native. Ini belum mengekspos +ringkasan Compaction yang dapat dibaca manusia atau daftar yang dapat diaudit tentang entri mana yang Codex +simpan setelah Compaction. Karena Codex memiliki thread native kanonis, `tool_result_persist` saat ini tidak -menulis ulang catatan hasil alat native Codex. Itu hanya berlaku saat OpenClaw -menulis hasil alat transkrip sesi milik OpenClaw. +menulis ulang rekaman hasil alat native Codex. Ini hanya berlaku ketika +OpenClaw menulis hasil alat transkrip sesi milik OpenClaw. Pembuatan media tidak memerlukan PI. Gambar, video, musik, PDF, TTS, dan pemahaman media tetap menggunakan pengaturan penyedia/model yang sesuai seperti `agents.defaults.imageGenerationModel`, `videoGenerationModel`, `pdfModel`, dan `messages.tts`. -## Pemecahan masalah +## Pemecahan Masalah -**Codex tidak muncul sebagai penyedia `/model` normal:** itu memang diharapkan untuk +**Codex tidak muncul sebagai penyedia `/model` normal:** ini diharapkan untuk konfigurasi baru. Pilih model `openai/gpt-*` dengan `agentRuntime.id: "codex"` (atau ref lama `codex/*`), aktifkan `plugins.entries.codex.enabled`, dan periksa apakah `plugins.allow` mengecualikan `codex`. **OpenClaw menggunakan PI alih-alih Codex:** `agentRuntime.id: "auto"` masih dapat menggunakan PI sebagai -backend kompatibilitas saat tidak ada harness Codex yang mengklaim run. Atur +backend kompatibilitas ketika tidak ada harness Codex yang mengklaim run. Atur `agentRuntime.id: "codex"` untuk memaksa pemilihan Codex saat pengujian. Runtime -Codex yang dipaksa sekarang gagal alih-alih fallback ke PI kecuali Anda secara -eksplisit mengatur `agentRuntime.fallback: "pi"`. Setelah server aplikasi Codex +Codex yang dipaksa sekarang gagal alih-alih fallback ke PI kecuali Anda +secara eksplisit mengatur `agentRuntime.fallback: "pi"`. Setelah server aplikasi Codex dipilih, kegagalannya muncul langsung tanpa konfigurasi fallback tambahan. **Server aplikasi ditolak:** tingkatkan Codex agar handshake server aplikasi -melaporkan versi `0.125.0` atau yang lebih baru. Prarilis versi yang sama atau -versi dengan sufiks build seperti `0.125.0-alpha.2` atau `0.125.0+custom` ditolak karena -lantai protokol stabil `0.125.0` adalah yang diuji OpenClaw. +melaporkan versi `0.125.0` atau lebih baru. Prarilis versi sama atau versi bersufiks build +seperti `0.125.0-alpha.2` atau `0.125.0+custom` ditolak karena +batas bawah protokol stabil `0.125.0` adalah yang diuji OpenClaw. **Penemuan model lambat:** turunkan `plugins.entries.codex.config.discovery.timeoutMs` atau nonaktifkan penemuan. @@ -1080,17 +1085,17 @@ atau nonaktifkan penemuan. **Transport WebSocket langsung gagal:** periksa `appServer.url`, `authToken`, dan bahwa server aplikasi jarak jauh menggunakan versi protokol server aplikasi Codex yang sama. -**Model non-Codex menggunakan PI:** itu memang diharapkan kecuali Anda memaksa +**Model non-Codex menggunakan PI:** ini diharapkan kecuali Anda memaksa `agentRuntime.id: "codex"` untuk agen tersebut atau memilih ref lama -`codex/*`. Ref biasa `openai/gpt-*` dan penyedia lain tetap berada di jalur -penyedia normalnya dalam mode `auto`. Jika Anda memaksa `agentRuntime.id: "codex"`, setiap -giliran tertanam untuk agen tersebut harus berupa model OpenAI yang didukung Codex. +`codex/*`. Ref `openai/gpt-*` biasa dan penyedia lain tetap berada di jalur +penyedia normalnya dalam mode `auto`. Jika Anda memaksa `agentRuntime.id: "codex"`, setiap giliran tertanam +untuk agen tersebut harus berupa model OpenAI yang didukung Codex. **Computer Use terpasang tetapi alat tidak berjalan:** periksa -`/codex computer-use status` dari sesi baru. Jika suatu alat melaporkan -`Native hook relay unavailable`, gunakan `/new` atau `/reset`; jika berlanjut, mulai ulang -gateway untuk membersihkan pendaftaran hook native yang kedaluwarsa. Jika `computer-use.list_apps` -kehabisan waktu, mulai ulang Codex Computer Use atau Codex Desktop dan coba lagi. +`/codex computer-use status` dari sesi baru. Jika sebuah alat melaporkan +`Native hook relay unavailable`, gunakan `/new` atau `/reset`; jika tetap terjadi, mulai ulang +gateway untuk membersihkan pendaftaran hook native yang usang. Jika `computer-use.list_apps` +habis waktu, mulai ulang Codex Computer Use atau Codex Desktop dan coba lagi. ## Terkait diff --git a/docs/id/providers/arcee.md b/docs/id/providers/arcee.md index 7f6d213ea..938742de4 100644 --- a/docs/id/providers/arcee.md +++ b/docs/id/providers/arcee.md @@ -1,37 +1,36 @@ --- read_when: - Anda ingin menggunakan Arcee AI dengan OpenClaw - - Anda memerlukan env var API key atau pilihan autentikasi CLI -summary: Penyiapan Arcee AI (auth + pemilihan model) + - Anda memerlukan variabel lingkungan kunci API atau pilihan autentikasi CLI +summary: Penyiapan Arcee AI (autentikasi + pemilihan model) title: Arcee AI x-i18n: - refreshed_at: '2026-04-28T05:23:26Z' - generated_at: "2026-04-24T09:22:08Z" - model: gpt-5.4 - provider: openai - source_hash: 54989e1706901fedc8a0c816ca7ee7f877fa4b973697540dd90cb9182420043f - source_path: providers/arcee.md - workflow: 15 + generated_at: "2026-05-02T23:39:05Z" + model: gpt-5.5 + provider: openai + source_hash: 622ee5288aec3ae0b45d3f06ba65fd6f972e07d7a7596ae3905d6fbdac0bf737 + source_path: providers/arcee.md + workflow: 16 --- [Arcee AI](https://arcee.ai) menyediakan akses ke keluarga model mixture-of-experts Trinity melalui API yang kompatibel dengan OpenAI. Semua model Trinity berlisensi Apache 2.0. Model Arcee AI dapat diakses langsung melalui platform Arcee atau melalui [OpenRouter](/id/providers/openrouter). -| Properti | Nilai | -| -------- | ------------------------------------------------------------------------------------ | -| Provider | `arcee` | -| Auth | `ARCEEAI_API_KEY` (langsung) atau `OPENROUTER_API_KEY` (melalui OpenRouter) | -| API | Kompatibel OpenAI | -| Base URL | `https://api.arcee.ai/api/v1` (langsung) atau `https://openrouter.ai/api/v1` (OpenRouter) | +| Properti | Nilai | +| -------- | ------------------------------------------------------------------------------------- | +| Penyedia | `arcee` | +| Autentikasi | `ARCEEAI_API_KEY` (langsung) atau `OPENROUTER_API_KEY` (melalui OpenRouter) | +| API | Kompatibel dengan OpenAI | +| URL Dasar | `https://api.arcee.ai/api/v1` (langsung) atau `https://openrouter.ai/api/v1` (OpenRouter) | ## Memulai - - Buat API key di [Arcee AI](https://chat.arcee.ai/). + + Buat kunci API di [Arcee AI](https://chat.arcee.ai/). ```bash @@ -54,8 +53,8 @@ Model Arcee AI dapat diakses langsung melalui platform Arcee atau melalui [OpenR - - Buat API key di [OpenRouter](https://openrouter.ai/keys). + + Buat kunci API di [OpenRouter](https://openrouter.ai/keys). ```bash @@ -73,7 +72,7 @@ Model Arcee AI dapat diakses langsung melalui platform Arcee atau melalui [OpenR } ``` - Ref model yang sama berfungsi untuk penyiapan langsung maupun OpenRouter (misalnya `arcee/trinity-large-thinking`). + Referensi model yang sama berfungsi untuk penyiapan langsung dan OpenRouter (misalnya `arcee/trinity-large-thinking`). @@ -104,39 +103,38 @@ Model Arcee AI dapat diakses langsung melalui platform Arcee atau melalui [OpenR ## Katalog bawaan -OpenClaw saat ini menyertakan katalog Arcee bawaan berikut: +OpenClaw saat ini menyertakan katalog Arcee bawaan ini: -| Ref model | Nama | Input | Konteks | Biaya (masuk/keluar per 1M) | Catatan | -| ------------------------------ | ---------------------- | ----- | ------- | --------------------------- | ------------------------------------------ | -| `arcee/trinity-large-thinking` | Trinity Large Thinking | teks | 256K | $0.25 / $0.90 | Model default; reasoning diaktifkan | -| `arcee/trinity-large-preview` | Trinity Large Preview | teks | 128K | $0.25 / $1.00 | Tujuan umum; 400B params, 13B aktif | -| `arcee/trinity-mini` | Trinity Mini 26B | teks | 128K | $0.045 / $0.15 | Cepat dan hemat biaya; function calling | +| Referensi model | Nama | Input | Konteks | Biaya (masuk/keluar per 1 juta) | Catatan | +| ------------------------------ | ---------------------- | ----- | ------- | -------------------- | ------------------------------------------ | +| `arcee/trinity-large-thinking` | Trinity Large Thinking | teks | 256K | $0.25 / $0.90 | Model default; penalaran diaktifkan; tanpa alat | +| `arcee/trinity-large-preview` | Trinity Large Preview | teks | 128K | $0.25 / $1.00 | Serbaguna; 400B parameter, 13B aktif | +| `arcee/trinity-mini` | Trinity Mini 26B | teks | 128K | $0.045 / $0.15 | Cepat dan hemat biaya; pemanggilan fungsi | -Preset onboarding menetapkan `arcee/trinity-large-thinking` sebagai model default. +Preset onboarding menetapkan `arcee/trinity-large-thinking` sebagai model default. Model ini hanya mendukung penalaran/teks dan tidak mendukung penggunaan alat atau pemanggilan fungsi. ## Fitur yang didukung -| Fitur | Didukung | -| --------------------------------------------- | ---------------------------- | -| Streaming | Ya | -| Penggunaan alat / function calling | Ya | -| Output terstruktur (mode JSON dan skema JSON) | Ya | -| Thinking lanjutan | Ya (Trinity Large Thinking) | +| Fitur | Didukung | +| --------------------------------------------- | ------------------------------------------- | +| Streaming | Ya | +| Penggunaan alat / pemanggilan fungsi | Bergantung pada model; bukan Trinity Large Thinking | +| Output terstruktur (mode JSON dan skema JSON) | Ya | +| Pemikiran lanjutan | Ya (Trinity Large Thinking) | - + Jika Gateway berjalan sebagai daemon (launchd/systemd), pastikan `ARCEEAI_API_KEY` - (atau `OPENROUTER_API_KEY`) tersedia untuk proses tersebut (misalnya di + (atau `OPENROUTER_API_KEY`) tersedia untuk proses tersebut (misalnya, di `~/.openclaw/.env` atau melalui `env.shellEnv`). - Saat menggunakan model Arcee melalui OpenRouter, ref model `arcee/*` yang sama tetap berlaku. - OpenClaw menangani perutean secara transparan berdasarkan pilihan auth Anda. Lihat - [dokumen provider OpenRouter](/id/providers/openrouter) untuk detail konfigurasi - khusus OpenRouter. + Saat menggunakan model Arcee melalui OpenRouter, referensi model `arcee/*` yang sama berlaku. + OpenClaw menangani perutean secara transparan berdasarkan pilihan autentikasi Anda. Lihat + [dokumentasi penyedia OpenRouter](/id/providers/openrouter) untuk detail konfigurasi khusus OpenRouter. @@ -144,9 +142,9 @@ Preset onboarding menetapkan `arcee/trinity-large-thinking` sebagai model defaul - Akses model Arcee dan banyak model lain melalui satu API key. + Akses model Arcee dan banyak model lain melalui satu kunci API. - Memilih provider, ref model, dan perilaku failover. + Memilih penyedia, referensi model, dan perilaku failover. diff --git a/docs/id/reference/RELEASING.md b/docs/id/reference/RELEASING.md index 4581a1f23..53e2c6b74 100644 --- a/docs/id/reference/RELEASING.md +++ b/docs/id/reference/RELEASING.md @@ -2,22 +2,21 @@ read_when: - Mencari definisi saluran rilis publik - Menjalankan validasi rilis atau penerimaan paket - - Mencari penamaan versi dan irama rilis + - Mencari penamaan versi dan ritme rilis summary: Jalur rilis, daftar periksa operator, kotak validasi, penamaan versi, dan kadensi title: Kebijakan rilis x-i18n: - generated_at: "2026-05-02T20:59:44Z" + generated_at: "2026-05-02T23:39:20Z" model: gpt-5.5 provider: openai - source_hash: 493cb8b42f0e15f3bf5f8fb9be7d01fd626f4f16db9ac0a85e6efa747ef12d12 + source_hash: ba316d1736eae8edd2fb0a71b9a3da345f8895c3b536e9a1f619718ea12fc851 source_path: reference/RELEASING.md workflow: 16 --- -OpenClaw memiliki empat jalur rilis publik: +OpenClaw memiliki tiga jalur rilis publik: -- stable: rilis bertag yang dipublikasikan ke npm `beta` secara default, atau ke npm `latest` saat diminta secara eksplisit -- alpha: tag prarilis yang dipublikasikan ke npm `alpha` +- stabil: rilis bertag yang dipublikasikan ke npm `beta` secara default, atau ke npm `latest` saat diminta secara eksplisit - beta: tag prarilis yang dipublikasikan ke npm `beta` - dev: head bergerak dari `main` @@ -27,261 +26,147 @@ OpenClaw memiliki empat jalur rilis publik: - Tag Git: `vYYYY.M.D` - Versi rilis koreksi stabil: `YYYY.M.D-N` - Tag Git: `vYYYY.M.D-N` -- Versi prarilis alpha: `YYYY.M.D-alpha.N` - - Tag Git: `vYYYY.M.D-alpha.N` - Versi prarilis beta: `YYYY.M.D-beta.N` - Tag Git: `vYYYY.M.D-beta.N` -- Jangan isi bulan atau hari dengan nol di depan +- Jangan tambahkan nol di depan bulan atau hari - `latest` berarti rilis npm stabil yang saat ini dipromosikan -- `alpha` berarti target instalasi alpha saat ini - `beta` berarti target instalasi beta saat ini - Rilis stabil dan rilis koreksi stabil dipublikasikan ke npm `beta` secara default; operator rilis dapat menargetkan `latest` secara eksplisit, atau mempromosikan build beta yang telah diperiksa nanti - Setiap rilis stabil OpenClaw mengirimkan paket npm dan aplikasi macOS bersama-sama; rilis beta biasanya memvalidasi dan memublikasikan jalur npm/paket terlebih dahulu, dengan - build/tanda tangan/notarisasi aplikasi mac disisihkan untuk stabil kecuali diminta secara eksplisit + build/tanda tangan/notarisasi aplikasi mac dicadangkan untuk stabil kecuali diminta secara eksplisit ## Irama rilis - Rilis bergerak dengan beta terlebih dahulu - Stabil mengikuti hanya setelah beta terbaru divalidasi -- Maintainer biasanya memotong rilis dari branch `release/YYYY.M.D` yang dibuat +- Maintainer biasanya membuat rilis dari cabang `release/YYYY.M.D` yang dibuat dari `main` saat ini, sehingga validasi dan perbaikan rilis tidak memblokir pengembangan baru di `main` -- Jika tag beta telah didorong atau dipublikasikan dan memerlukan perbaikan, maintainer memotong +- Jika tag beta telah didorong atau dipublikasikan dan membutuhkan perbaikan, maintainer membuat tag `-beta.N` berikutnya alih-alih menghapus atau membuat ulang tag beta lama -- Prosedur rilis terperinci, persetujuan, kredensial, dan catatan pemulihan +- Prosedur rilis, persetujuan, kredensial, dan catatan pemulihan terperinci hanya untuk maintainer ## Daftar periksa operator rilis Daftar periksa ini adalah bentuk publik dari alur rilis. Kredensial privat, -penandatanganan, notarisasi, pemulihan dist-tag, dan detail rollback darurat tetap berada di -buku panduan operasional rilis khusus maintainer. +penandatanganan, notarisasi, pemulihan dist-tag, dan detail rollback darurat tetap berada dalam +runbook rilis khusus maintainer. -1. Mulai dari `main` saat ini: tarik yang terbaru, pastikan commit target telah didorong, - dan pastikan CI `main` saat ini cukup hijau untuk membuat branch darinya. +1. Mulai dari `main` saat ini: tarik yang terbaru, konfirmasi commit target telah didorong, + dan konfirmasi CI `main` saat ini cukup hijau untuk membuat cabang darinya. 2. Tulis ulang bagian teratas `CHANGELOG.md` dari riwayat commit nyata dengan - `/changelog`, jaga entri tetap berorientasi pengguna, commit, dorong, dan rebase/tarik - sekali lagi sebelum membuat branch. + `/changelog`, pertahankan entri yang berorientasi pengguna, commit, dorong, lalu rebase/tarik + sekali lagi sebelum membuat cabang. 3. Tinjau catatan kompatibilitas rilis di `src/plugins/compat/registry.ts` dan - `src/commands/doctor/shared/deprecation-compat.ts`. Hapus kompatibilitas yang kedaluwarsa - hanya ketika jalur peningkatan tetap tercakup, atau catat mengapa hal itu - sengaja dipertahankan. -4. Buat `release/YYYY.M.D` dari `main` saat ini; jangan lakukan pekerjaan rilis normal + `src/commands/doctor/shared/deprecation-compat.ts`. Hapus kompatibilitas + yang kedaluwarsa hanya saat jalur upgrade tetap tercakup, atau catat mengapa itu + sengaja tetap dibawa. +4. Buat `release/YYYY.M.D` dari `main` saat ini; jangan melakukan pekerjaan rilis normal langsung di `main`. 5. Naikkan setiap lokasi versi yang diperlukan untuk tag yang dimaksud, jalankan `pnpm plugins:sync` agar paket Plugin yang dapat dipublikasikan berbagi versi rilis - dan metadata kompatibilitas, lalu jalankan prapemeriksaan deterministik lokal: + dan metadata kompatibilitas, lalu jalankan preflight deterministik lokal: `pnpm check:test-types`, `pnpm check:architecture`, `pnpm build && pnpm ui:build`, `pnpm plugins:sync:check`, dan `pnpm release:check`. 6. Jalankan `OpenClaw NPM Release` dengan `preflight_only=true`. Sebelum tag ada, - SHA branch rilis 40 karakter penuh diizinkan untuk prapemeriksaan khusus validasi. + SHA cabang rilis lengkap 40 karakter diizinkan untuk preflight khusus validasi. Simpan `preflight_run_id` yang berhasil. 7. Mulai semua pengujian prarilis dengan `Full Release Validation` untuk - branch rilis, tag, atau SHA commit penuh. Ini adalah satu titik masuk manual + cabang rilis, tag, atau SHA commit lengkap. Ini adalah satu-satunya entrypoint manual untuk empat kotak pengujian rilis besar: Vitest, Docker, QA Lab, dan Package. -8. Jika validasi gagal, perbaiki di branch rilis dan jalankan ulang file, jalur, - job alur kerja, profil paket, penyedia, atau allowlist model gagal terkecil yang - membuktikan perbaikan. Jalankan ulang umbrella penuh hanya ketika permukaan yang berubah membuat +8. Jika validasi gagal, perbaiki di cabang rilis dan jalankan ulang file gagal terkecil, + lane, pekerjaan workflow, profil paket, penyedia, atau allowlist model yang + membuktikan perbaikan. Jalankan ulang umbrella penuh hanya saat permukaan yang berubah membuat bukti sebelumnya usang. -9. Untuk alpha atau beta, beri tag `vYYYY.M.D-alpha.N` atau `vYYYY.M.D-beta.N`, lalu jalankan `OpenClaw Release Publish` dari - branch `release/YYYY.M.D` yang cocok. Ini memverifikasi `pnpm plugins:sync:check`, - memublikasikan semua paket Plugin yang dapat dipublikasikan ke npm terlebih dahulu, memublikasikan set yang sama - ke ClawHub kedua, lalu mempromosikan artefak prapemeriksaan npm OpenClaw yang disiapkan - dengan dist-tag yang cocok. Setelah publikasi, jalankan penerimaan paket pascapublikasi - terhadap paket `openclaw@YYYY.M.D-alpha.N`, `openclaw@alpha`, - `openclaw@YYYY.M.D-beta.N`, atau `openclaw@beta` yang dipublikasikan. Jika prarilis yang telah didorong atau - dipublikasikan memerlukan perbaikan, potong nomor prarilis cocok berikutnya; - jangan hapus atau tulis ulang prarilis lama. +9. Untuk beta, tag `vYYYY.M.D-beta.N`, lalu jalankan `OpenClaw Release Publish` dari + cabang `release/YYYY.M.D` yang cocok. Itu memverifikasi `pnpm plugins:sync:check`, + memublikasikan semua paket Plugin yang dapat dipublikasikan ke npm terlebih dahulu, memublikasikan set + yang sama ke ClawHub kedua, lalu mempromosikan artefak preflight npm OpenClaw + yang disiapkan dengan dist-tag yang cocok. Setelah publikasi, jalankan penerimaan paket + pascapublikasi terhadap paket `openclaw@YYYY.M.D-beta.N` atau + `openclaw@beta` yang dipublikasikan. Jika prarilis yang telah didorong atau dipublikasikan membutuhkan perbaikan, + buat nomor prarilis cocok berikutnya; jangan hapus atau tulis ulang prarilis lama. 10. Untuk stabil, lanjutkan hanya setelah beta atau kandidat rilis yang telah diperiksa memiliki bukti validasi yang diperlukan. Publikasi npm stabil juga melalui - `OpenClaw Release Publish`, menggunakan kembali artefak prapemeriksaan yang berhasil melalui + `OpenClaw Release Publish`, menggunakan ulang artefak preflight yang berhasil melalui `preflight_run_id`; kesiapan rilis macOS stabil juga memerlukan `.zip`, `.dmg`, `.dSYM.zip` yang telah dipaketkan, dan `appcast.xml` yang diperbarui di `main`. -11. Setelah publikasi, jalankan pemverifikasi npm pascapublikasi, E2E Telegram npm-terpublikasi - mandiri opsional saat Anda memerlukan bukti saluran pascapublikasi, +11. Setelah publikasi, jalankan pemverifikasi pascapublikasi npm, E2E Telegram + published-npm mandiri opsional saat Anda membutuhkan bukti channel pascapublikasi, promosi dist-tag saat diperlukan, catatan rilis/prarilis GitHub dari - bagian `CHANGELOG.md` cocok yang lengkap, dan langkah-langkah pengumuman rilis. + bagian `CHANGELOG.md` lengkap yang cocok, dan langkah pengumuman rilis. -## Prapemeriksaan rilis +## Preflight rilis -- Jalankan `pnpm check:test-types` sebelum preflight rilis agar TypeScript pengujian tetap - tercakup di luar gate lokal `pnpm check` yang lebih cepat -- Jalankan `pnpm check:architecture` sebelum preflight rilis agar pemeriksaan siklus - impor dan batas arsitektur yang lebih luas hijau di luar gate lokal yang lebih cepat -- Jalankan `pnpm build && pnpm ui:build` sebelum `pnpm release:check` agar artefak - rilis `dist/*` yang diharapkan dan bundel Control UI tersedia untuk langkah - validasi pack -- Jalankan `pnpm plugins:sync` setelah bump versi root dan sebelum tagging. Perintah ini - memperbarui versi paket Plugin yang dapat dipublikasikan, metadata kompatibilitas - peer/API OpenClaw, metadata build, dan stub changelog Plugin agar cocok dengan versi - rilis core. `pnpm plugins:sync:check` adalah guard rilis non-mutating; - workflow publish gagal sebelum mutasi registry apa pun jika langkah ini - terlupa. -- Jalankan workflow manual `Full Release Validation` sebelum persetujuan rilis untuk - memulai semua test box pra-rilis dari satu entrypoint. Workflow ini menerima branch, - tag, atau SHA commit penuh, mendispatch `CI` manual, dan mendispatch - `OpenClaw Release Checks` untuk install smoke, package acceptance, rangkaian - release-path Docker, live/E2E, OpenWebUI, paritas QA Lab, Matrix, dan lane Telegram. - Dengan `release_profile=full` dan `rerun_group=all`, workflow ini juga menjalankan - package Telegram E2E terhadap artefak `release-package-under-test` dari release - checks. Berikan `npm_telegram_package_spec` setelah publish ketika Telegram E2E yang - sama juga harus membuktikan paket npm yang dipublikasikan. Berikan - `package_acceptance_package_spec` setelah publish ketika Package Acceptance harus - menjalankan matriks package/update terhadap paket npm yang sudah dikirim, bukan - artefak yang dibuild dari SHA. Berikan - `evidence_package_spec` ketika laporan evidence privat harus membuktikan bahwa - validasi cocok dengan paket npm yang dipublikasikan tanpa memaksa Telegram E2E. - Contoh: - `gh workflow run full-release-validation.yml --ref main -f ref=release/YYYY.M.D` -- Jalankan workflow manual `Package Acceptance` ketika Anda menginginkan bukti - side-channel untuk kandidat paket sementara pekerjaan rilis berlanjut. Gunakan `source=npm` untuk - `openclaw@alpha`, `openclaw@beta`, `openclaw@latest`, atau versi rilis persis; `source=ref` - untuk mem-pack branch/tag/SHA `package_ref` tepercaya dengan harness - `workflow_ref` saat ini; `source=url` untuk tarball HTTPS dengan SHA-256 yang wajib; - atau `source=artifact` untuk tarball yang diunggah oleh run GitHub Actions lain. - Workflow ini me-resolve kandidat menjadi - `package-under-test`, menggunakan kembali scheduler rilis Docker E2E terhadap - tarball tersebut, dan dapat menjalankan QA Telegram terhadap tarball yang sama dengan - `telegram_mode=mock-openai` atau `telegram_mode=live-frontier`. Ketika - lane Docker yang dipilih menyertakan `published-upgrade-survivor`, artefak paket - adalah kandidat dan `published_upgrade_survivor_baseline` memilih baseline yang - dipublikasikan. +- Jalankan `pnpm check:test-types` sebelum preflight rilis agar TypeScript pengujian tetap tercakup di luar gate lokal `pnpm check` yang lebih cepat +- Jalankan `pnpm check:architecture` sebelum preflight rilis agar pemeriksaan siklus impor dan batas arsitektur yang lebih luas hijau di luar gate lokal yang lebih cepat +- Jalankan `pnpm build && pnpm ui:build` sebelum `pnpm release:check` agar artefak rilis `dist/*` yang diharapkan dan bundle Control UI ada untuk langkah validasi pack +- Jalankan `pnpm plugins:sync` setelah bump versi root dan sebelum tagging. Ini memperbarui versi paket Plugin yang dapat dipublikasikan, metadata kompatibilitas peer/API OpenClaw, metadata build, dan stub changelog Plugin agar cocok dengan versi rilis inti. `pnpm plugins:sync:check` adalah guard rilis yang tidak memutasi; workflow publikasi gagal sebelum mutasi registry apa pun jika langkah ini terlupakan. +- Jalankan workflow manual `Full Release Validation` sebelum persetujuan rilis untuk memulai semua kotak pengujian pra-rilis dari satu entrypoint. Ini menerima branch, tag, atau SHA commit lengkap, mendispatch `CI` manual, dan mendispatch `OpenClaw Release Checks` untuk install smoke, package acceptance, suite jalur rilis Docker, live/E2E, OpenWebUI, paritas QA Lab, Matrix, dan jalur Telegram. Dengan `release_profile=full` dan `rerun_group=all`, ini juga menjalankan paket Telegram E2E terhadap artefak `release-package-under-test` dari pemeriksaan rilis. Berikan `npm_telegram_package_spec` setelah publikasi ketika Telegram E2E yang sama juga harus membuktikan paket npm yang dipublikasikan. Berikan `package_acceptance_package_spec` setelah publikasi ketika Package Acceptance harus menjalankan matriks paket/pembaruan terhadap paket npm yang dikirim, bukan artefak yang dibangun dari SHA. Berikan `evidence_package_spec` ketika laporan bukti privat harus membuktikan bahwa validasi cocok dengan paket npm yang dipublikasikan tanpa memaksa Telegram E2E. Contoh: `gh workflow run full-release-validation.yml --ref main -f ref=release/YYYY.M.D` +- Jalankan workflow manual `Package Acceptance` ketika Anda menginginkan bukti side-channel untuk kandidat paket sementara pekerjaan rilis berlanjut. Gunakan `source=npm` untuk `openclaw@beta`, `openclaw@latest`, atau versi rilis eksak; `source=ref` untuk mem-pack branch/tag/SHA `package_ref` tepercaya dengan harness `workflow_ref` saat ini; `source=url` untuk tarball HTTPS dengan SHA-256 wajib; atau `source=artifact` untuk tarball yang diunggah oleh run GitHub Actions lain. Workflow menyelesaikan kandidat menjadi `package-under-test`, menggunakan ulang scheduler rilis Docker E2E terhadap tarball tersebut, dan dapat menjalankan QA Telegram terhadap tarball yang sama dengan `telegram_mode=mock-openai` atau `telegram_mode=live-frontier`. Ketika jalur Docker yang dipilih menyertakan `published-upgrade-survivor`, artefak paket adalah kandidat dan `published_upgrade_survivor_baseline` memilih baseline yang dipublikasikan. Contoh: `gh workflow run package-acceptance.yml --ref main -f workflow_ref=main -f source=npm -f package_spec=openclaw@beta -f suite_profile=product -f published_upgrade_survivor_baseline=openclaw@2026.4.26 -f telegram_mode=mock-openai` Profil umum: - - `smoke`: lane install/channel/agent, jaringan Gateway, dan reload config - - `package`: lane package/update/Plugin native artefak tanpa OpenWebUI atau ClawHub live - - `product`: profil package ditambah channel MCP, pembersihan cron/subagent, - pencarian web OpenAI, dan OpenWebUI - - `full`: chunk release-path Docker dengan OpenWebUI - - `custom`: pilihan `docker_lanes` persis untuk rerun terfokus -- Jalankan workflow manual `CI` secara langsung ketika Anda hanya membutuhkan cakupan CI - normal penuh untuk kandidat rilis. Dispatch CI manual melewati scoping changed - dan memaksa shard Linux Node, shard bundled-plugin, kontrak channel, - kompatibilitas Node 22, `check`, `check-additional`, build smoke, - pemeriksaan docs, Skills Python, Windows, macOS, Android, dan lane i18n Control UI. + - `smoke`: jalur instal/channel/agent, jaringan Gateway, dan reload konfigurasi + - `package`: jalur paket/pembaruan/Plugin native artefak tanpa OpenWebUI atau ClawHub live + - `product`: profil paket ditambah channel MCP, pembersihan cron/subagent, pencarian web OpenAI, dan OpenWebUI + - `full`: chunk jalur rilis Docker dengan OpenWebUI + - `custom`: pilihan `docker_lanes` eksak untuk rerun terfokus +- Jalankan workflow manual `CI` secara langsung ketika Anda hanya membutuhkan cakupan CI normal penuh untuk kandidat rilis. Dispatch CI manual melewati scoping perubahan dan memaksa shard Linux Node, shard Plugin terbundel, kontrak channel, kompatibilitas Node 22, `check`, `check-additional`, build smoke, pemeriksaan docs, Skills Python, Windows, macOS, Android, dan jalur i18n Control UI. Contoh: `gh workflow run ci.yml --ref release/YYYY.M.D` -- Jalankan `pnpm qa:otel:smoke` saat memvalidasi telemetri rilis. Perintah ini - melatih QA-lab melalui receiver OTLP/HTTP lokal dan memverifikasi nama span trace - yang diekspor, atribut yang dibatasi, serta redaksi konten/identifier tanpa - memerlukan Opik, Langfuse, atau collector eksternal lain. +- Jalankan `pnpm qa:otel:smoke` ketika memvalidasi telemetri rilis. Ini menjalankan QA-lab melalui penerima OTLP/HTTP lokal dan memverifikasi nama span trace yang diekspor, atribut terbatas, serta redaksi konten/identifier tanpa memerlukan Opik, Langfuse, atau kolektor eksternal lain. - Jalankan `pnpm release:check` sebelum setiap rilis bertag -- Jalankan `OpenClaw Release Publish` untuk urutan publish yang melakukan mutasi setelah - tag tersedia. Dispatch dari `release/YYYY.M.D` (atau `main` saat mem-publish tag - yang dapat dijangkau dari main), berikan tag rilis dan - `preflight_run_id` npm OpenClaw yang sukses, dan pertahankan scope publish Plugin default - `all-publishable` kecuali Anda sengaja menjalankan perbaikan terfokus. Workflow - ini menserialkan publish npm Plugin, publish ClawHub Plugin, dan publish npm OpenClaw - agar paket core tidak dipublikasikan sebelum Plugin eksternalnya. -- Release checks sekarang berjalan dalam workflow manual terpisah: +- Jalankan `OpenClaw Release Publish` untuk urutan publikasi yang memutasi setelah tag ada. Dispatch dari `release/YYYY.M.D` (atau `main` ketika memublikasikan tag yang dapat dijangkau dari main), berikan tag rilis dan `preflight_run_id` npm OpenClaw yang berhasil, dan pertahankan scope publikasi Plugin default `all-publishable` kecuali Anda sengaja menjalankan perbaikan terfokus. Workflow menserialkan publikasi npm Plugin, publikasi ClawHub Plugin, dan publikasi npm OpenClaw agar paket inti tidak dipublikasikan sebelum Plugin eksternalnya. +- Pemeriksaan rilis sekarang berjalan dalam workflow manual terpisah: `OpenClaw Release Checks` -- `OpenClaw Release Checks` juga menjalankan lane paritas mock QA Lab ditambah profil - Matrix live cepat dan lane QA Telegram sebelum persetujuan rilis. Lane live - menggunakan environment `qa-live-shared`; Telegram juga menggunakan lease kredensial - Convex CI. Jalankan workflow manual `QA-Lab - All Lanes` dengan - `matrix_profile=all` dan `matrix_shards=true` saat Anda menginginkan inventaris - transport Matrix, media, dan E2EE penuh secara paralel. -- Validasi runtime install dan upgrade lintas-OS adalah bagian dari - `OpenClaw Release Checks` publik dan `Full Release Validation`, yang memanggil - workflow reusable - `.github/workflows/openclaw-cross-os-release-checks-reusable.yml` secara langsung -- Pemisahan ini disengaja: pertahankan jalur rilis npm nyata tetap pendek, - deterministik, dan berfokus artefak, sementara pemeriksaan live yang lebih lambat - tetap berada di lane sendiri agar tidak menahan atau memblokir publish -- Release checks yang membawa secret harus didispatch melalui `Full Release -Validation` atau dari ref workflow `main`/release agar logika workflow dan - secret tetap terkendali -- `OpenClaw Release Checks` menerima branch, tag, atau SHA commit penuh selama - commit yang di-resolve dapat dijangkau dari branch OpenClaw atau tag rilis -- Preflight validation-only `OpenClaw NPM Release` juga menerima SHA commit - branch workflow 40 karakter penuh saat ini tanpa memerlukan tag yang sudah dipush -- Jalur SHA tersebut hanya untuk validasi dan tidak dapat dipromosikan menjadi publish nyata -- Dalam mode SHA, workflow mensintesis `v` hanya untuk - pemeriksaan metadata paket; publish nyata tetap memerlukan tag rilis nyata -- Kedua workflow mempertahankan jalur publish dan promosi nyata di runner - GitHub-hosted, sementara jalur validasi non-mutating dapat menggunakan runner - Linux Blacksmith yang lebih besar -- Workflow tersebut menjalankan - `OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_CACHE_TEST=1 pnpm test:live:cache` - menggunakan secret workflow `OPENAI_API_KEY` dan `ANTHROPIC_API_KEY` -- Preflight rilis npm tidak lagi menunggu lane release checks terpisah -- Jalankan `RELEASE_TAG=vYYYY.M.D node --import tsx scripts/openclaw-npm-release-check.ts` - (atau tag beta/koreksi yang cocok) sebelum persetujuan -- Setelah publish npm, jalankan - `node --import tsx scripts/openclaw-npm-postpublish-verify.ts YYYY.M.D` - (atau versi beta/koreksi yang cocok) untuk memverifikasi jalur install registry - yang dipublikasikan dalam prefix temp baru -- Setelah publish beta, jalankan `OPENCLAW_NPM_TELEGRAM_PACKAGE_SPEC=openclaw@YYYY.M.D-beta.N OPENCLAW_NPM_TELEGRAM_CREDENTIAL_SOURCE=convex OPENCLAW_NPM_TELEGRAM_CREDENTIAL_ROLE=ci pnpm test:docker:npm-telegram-live` - untuk memverifikasi onboarding paket terinstal, setup Telegram, dan Telegram E2E nyata - terhadap paket npm yang dipublikasikan menggunakan pool kredensial Telegram leased bersama. - One-off maintainer lokal dapat menghilangkan var Convex dan memberikan tiga - kredensial env `OPENCLAW_QA_TELEGRAM_*` secara langsung. -- Maintainer dapat menjalankan pemeriksaan post-publish yang sama dari GitHub Actions melalui - workflow manual `NPM Telegram Beta E2E`. Workflow ini sengaja manual-only dan - tidak berjalan pada setiap merge. -- Otomasi rilis maintainer sekarang menggunakan preflight-lalu-promote: - - publish npm nyata harus lolos `preflight_run_id` npm yang sukses - - publish npm nyata harus didispatch dari branch `main` atau - `release/YYYY.M.D` yang sama dengan run preflight yang sukses +- `OpenClaw Release Checks` juga menjalankan jalur paritas mock QA Lab ditambah profil Matrix live cepat dan jalur QA Telegram sebelum persetujuan rilis. Jalur live menggunakan environment `qa-live-shared`; Telegram juga menggunakan lease kredensial CI Convex. Jalankan workflow manual `QA-Lab - All Lanes` dengan `matrix_profile=all` dan `matrix_shards=true` ketika Anda menginginkan inventaris transport Matrix, media, dan E2EE penuh secara paralel. +- Validasi runtime instal dan upgrade lintas-OS adalah bagian dari `OpenClaw Release Checks` dan `Full Release Validation` publik, yang memanggil workflow reusable `.github/workflows/openclaw-cross-os-release-checks-reusable.yml` secara langsung +- Pemisahan ini disengaja: jaga jalur rilis npm nyata tetap pendek, deterministik, dan berfokus pada artefak, sementara pemeriksaan live yang lebih lambat tetap berada di jalurnya sendiri agar tidak menunda atau memblokir publikasi +- Pemeriksaan rilis yang membawa secret harus didispatch melalui `Full Release Validation` atau dari ref workflow `main`/rilis agar logika workflow dan secret tetap terkendali +- `OpenClaw Release Checks` menerima branch, tag, atau SHA commit lengkap selama commit yang diselesaikan dapat dijangkau dari branch OpenClaw atau tag rilis +- Preflight khusus validasi `OpenClaw NPM Release` juga menerima SHA commit branch-workflow 40 karakter penuh saat ini tanpa memerlukan tag yang sudah dipush +- Jalur SHA tersebut hanya untuk validasi dan tidak dapat dipromosikan menjadi publikasi nyata +- Dalam mode SHA, workflow mensintesis `v` hanya untuk pemeriksaan metadata paket; publikasi nyata tetap memerlukan tag rilis nyata +- Kedua workflow mempertahankan jalur publikasi dan promosi nyata pada runner yang di-host GitHub, sementara jalur validasi non-mutasi dapat menggunakan runner Blacksmith Linux yang lebih besar +- Workflow tersebut menjalankan `OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_CACHE_TEST=1 pnpm test:live:cache` menggunakan secret workflow `OPENAI_API_KEY` dan `ANTHROPIC_API_KEY` +- Preflight rilis npm tidak lagi menunggu jalur pemeriksaan rilis terpisah +- Jalankan `RELEASE_TAG=vYYYY.M.D node --import tsx scripts/openclaw-npm-release-check.ts` (atau tag beta/koreksi yang sesuai) sebelum persetujuan +- Setelah publikasi npm, jalankan `node --import tsx scripts/openclaw-npm-postpublish-verify.ts YYYY.M.D` (atau versi beta/koreksi yang sesuai) untuk memverifikasi jalur instal registry yang dipublikasikan dalam prefix temp baru +- Setelah publikasi beta, jalankan `OPENCLAW_NPM_TELEGRAM_PACKAGE_SPEC=openclaw@YYYY.M.D-beta.N OPENCLAW_NPM_TELEGRAM_CREDENTIAL_SOURCE=convex OPENCLAW_NPM_TELEGRAM_CREDENTIAL_ROLE=ci pnpm test:docker:npm-telegram-live` untuk memverifikasi onboarding paket terinstal, penyiapan Telegram, dan Telegram E2E nyata terhadap paket npm yang dipublikasikan menggunakan pool kredensial Telegram lease bersama. One-off maintainer lokal dapat menghilangkan var Convex dan meneruskan tiga kredensial env `OPENCLAW_QA_TELEGRAM_*` secara langsung. +- Maintainer dapat menjalankan pemeriksaan pasca-publikasi yang sama dari GitHub Actions melalui workflow manual `NPM Telegram Beta E2E`. Ini sengaja hanya manual dan tidak berjalan pada setiap merge. +- Otomasi rilis maintainer sekarang menggunakan preflight-lalu-promosi: + - publikasi npm nyata harus lulus `preflight_run_id` npm yang berhasil + - publikasi npm nyata harus didispatch dari branch `main` atau `release/YYYY.M.D` yang sama dengan run preflight yang berhasil - rilis npm stable default ke `beta` - - publish npm stable dapat menargetkan `latest` secara eksplisit melalui input workflow - - mutasi npm dist-tag berbasis token sekarang berada di - `openclaw/releases-private/.github/workflows/openclaw-npm-dist-tags.yml` - untuk keamanan, karena `npm dist-tag add` masih membutuhkan `NPM_TOKEN` sementara - repo publik mempertahankan publish OIDC-only - - `macOS Release` publik hanya untuk validasi; ketika tag hanya berada di - branch rilis tetapi workflow didispatch dari `main`, set - `public_release_branch=release/YYYY.M.D` - - publish mac privat nyata harus lolos - `preflight_run_id` dan `validate_run_id` mac privat yang sukses - - jalur publish nyata mempromosikan artefak yang sudah disiapkan, bukan - membuildnya lagi -- Untuk rilis koreksi stable seperti `YYYY.M.D-N`, verifier post-publish - juga memeriksa jalur upgrade temp-prefix yang sama dari `YYYY.M.D` ke `YYYY.M.D-N` - agar koreksi rilis tidak dapat diam-diam meninggalkan install global lama pada - payload stable dasar -- Preflight rilis npm gagal tertutup kecuali tarball menyertakan - `dist/control-ui/index.html` dan payload `dist/control-ui/assets/` yang tidak kosong - agar kita tidak mengirim dashboard browser kosong lagi -- Verifikasi post-publish juga memeriksa bahwa entrypoint Plugin yang dipublikasikan dan - metadata paket ada di layout registry yang terinstal. Rilis yang - mengirim payload runtime Plugin yang hilang menggagalkan verifier postpublish dan - tidak dapat dipromosikan ke `latest`. -- `pnpm test:install:smoke` juga menegakkan anggaran `unpackedSize` npm pack pada - tarball update kandidat, sehingga e2e installer menangkap pack bloat yang tidak disengaja - sebelum jalur publish rilis -- Jika pekerjaan rilis menyentuh perencanaan CI, manifest timing extension, atau - matriks pengujian extension, regenerasi dan tinjau output matriks - `plugin-prerelease-extension-shard` milik planner dari - `.github/workflows/plugin-prerelease.yml` sebelum persetujuan agar catatan rilis tidak - menggambarkan layout CI yang basi -- Kesiapan rilis macOS stable juga mencakup surface updater: - - release GitHub harus berakhir dengan `.zip`, `.dmg`, dan `.dSYM.zip` yang sudah dipaketkan - - `appcast.xml` di `main` harus menunjuk ke zip stable baru setelah publish - - app yang dipaketkan harus mempertahankan bundle id non-debug, URL feed Sparkle - yang tidak kosong, dan `CFBundleVersion` pada atau di atas floor build Sparkle kanonis - untuk versi rilis tersebut + - publikasi npm stable dapat menargetkan `latest` secara eksplisit melalui input workflow + - mutasi dist-tag npm berbasis token sekarang berada di `openclaw/releases-private/.github/workflows/openclaw-npm-dist-tags.yml` untuk keamanan, karena `npm dist-tag add` masih memerlukan `NPM_TOKEN` sementara repo publik mempertahankan publikasi hanya OIDC + - `macOS Release` publik hanya untuk validasi; ketika tag hanya berada di branch rilis tetapi workflow didispatch dari `main`, atur `public_release_branch=release/YYYY.M.D` + - publikasi mac privat nyata harus lulus `preflight_run_id` mac privat dan `validate_run_id` yang berhasil + - jalur publikasi nyata mempromosikan artefak yang sudah disiapkan, bukan membangunnya ulang +- Untuk rilis koreksi stable seperti `YYYY.M.D-N`, verifier pasca-publikasi juga memeriksa jalur upgrade temp-prefix yang sama dari `YYYY.M.D` ke `YYYY.M.D-N` agar koreksi rilis tidak diam-diam meninggalkan instal global lama pada payload stable dasar +- Preflight rilis npm gagal tertutup kecuali tarball menyertakan `dist/control-ui/index.html` dan payload `dist/control-ui/assets/` yang tidak kosong agar kita tidak mengirim dashboard browser kosong lagi +- Verifikasi pasca-publikasi juga memeriksa bahwa entrypoint Plugin yang dipublikasikan dan metadata paket ada dalam layout registry yang terinstal. Rilis yang mengirim payload runtime Plugin yang hilang menggagalkan verifier postpublish dan tidak dapat dipromosikan ke `latest`. +- `pnpm test:install:smoke` juga memberlakukan anggaran `unpackedSize` pack npm pada tarball pembaruan kandidat, sehingga e2e installer menangkap pembengkakan pack tidak disengaja sebelum jalur publikasi rilis +- Jika pekerjaan rilis menyentuh perencanaan CI, manifest timing ekstensi, atau matriks pengujian ekstensi, regenerasi dan tinjau output matriks `plugin-prerelease-extension-shard` milik planner dari `.github/workflows/plugin-prerelease.yml` sebelum persetujuan agar catatan rilis tidak mendeskripsikan layout CI yang basi +- Kesiapan rilis macOS stable juga mencakup permukaan updater: + - GitHub release harus berakhir dengan `.zip`, `.dmg`, dan `.dSYM.zip` yang sudah dipaketkan + - `appcast.xml` pada `main` harus menunjuk ke zip stable baru setelah publikasi + - aplikasi yang dipaketkan harus mempertahankan bundle id non-debug, URL feed Sparkle yang tidak kosong, dan `CFBundleVersion` pada atau di atas batas bawah build Sparkle kanonis untuk versi rilis tersebut ## Kotak pengujian rilis -`Full Release Validation` adalah cara operator memulai semua pengujian pra-rilis dari -satu entrypoint. Untuk bukti commit yang dipin pada branch yang bergerak cepat, gunakan -helper agar setiap workflow turunan berjalan dari branch sementara yang dikunci pada SHA -target: +`Full Release Validation` adalah cara operator memulai semua pengujian pra-rilis dari satu entrypoint. Untuk bukti commit yang dipin pada branch yang bergerak cepat, gunakan helper agar setiap child workflow berjalan dari branch sementara yang dikunci pada SHA target: ```bash pnpm ci:full-release --sha ``` -Helper mendorong `release-ci/-...`, mendispatch `Full Release Validation` -dari branch tersebut dengan `ref=`, memverifikasi setiap `headSha` workflow turunan -cocok dengan target, lalu menghapus branch sementara. Ini menghindari pembuktian -run turunan `main` yang lebih baru secara tidak sengaja. +Helper mendorong `release-ci/-...`, mendispatch `Full Release Validation` dari branch tersebut dengan `ref=`, memverifikasi setiap child workflow `headSha` cocok dengan target, lalu menghapus branch sementara. Ini menghindari pembuktian run child `main` yang lebih baru secara tidak sengaja. -Untuk validasi branch rilis atau tag, jalankan dari ref workflow `main` tepercaya -dan berikan branch rilis atau tag sebagai `ref`: +Untuk validasi branch atau tag rilis, jalankan dari ref workflow `main` tepercaya dan berikan branch atau tag rilis sebagai `ref`: ```bash gh workflow run full-release-validation.yml \ @@ -293,38 +178,44 @@ gh workflow run full-release-validation.yml \ -f evidence_package_spec=openclaw@YYYY.M.D-beta.N ``` -Alur kerja menyelesaikan ref target, menjalankan `CI` manual dengan +Alur kerja menyelesaikan ref target, menjalankan manual `CI` dengan `target_ref=`, menjalankan `OpenClaw Release Checks`, dan menjalankan -paket mandiri Telegram E2E saat `release_profile=full` dengan -`rerun_group=all` atau saat `npm_telegram_package_spec` ditetapkan. `OpenClaw Release -Checks` lalu menyebar ke install smoke, pemeriksaan rilis lintas-OS, cakupan jalur rilis Docker live/E2E, Package Acceptance dengan QA paket Telegram, paritas QA Lab, Matrix live, dan Telegram live. Sebuah run penuh hanya dapat diterima ketika ringkasan -`Full Release Validation` +paket mandiri Telegram E2E ketika `release_profile=full` dengan +`rerun_group=all` atau ketika `npm_telegram_package_spec` diatur. `OpenClaw Release +Checks` kemudian menyebar ke install smoke, pemeriksaan rilis lintas-OS, cakupan +jalur rilis Docker live/E2E, Package Acceptance dengan QA paket Telegram, paritas +QA Lab, Matrix live, dan Telegram live. Proses penuh hanya dapat diterima ketika +ringkasan `Full Release Validation` menampilkan `normal_ci` dan `release_checks` sebagai berhasil. Dalam mode full/all, -child `npm_telegram` juga harus berhasil; di luar full/all, ini dilewati -kecuali `npm_telegram_package_spec` yang telah dipublikasikan disediakan. Ringkasan -verifier akhir menyertakan tabel pekerjaan terlambat untuk setiap child run, sehingga manajer rilis dapat melihat jalur kritis saat ini tanpa mengunduh log. +turunan `npm_telegram` juga harus berhasil; di luar full/all, ini dilewati +kecuali `npm_telegram_package_spec` yang sudah dipublikasikan disediakan. Ringkasan +verifikator akhir menyertakan tabel job paling lambat untuk setiap proses turunan, +sehingga manajer rilis dapat melihat jalur kritis saat ini tanpa mengunduh log. Lihat [Validasi rilis penuh](/id/reference/full-release-validation) untuk -matriks tahap lengkap, nama pekerjaan alur kerja yang tepat, perbedaan profil stabil versus penuh, artefak, dan handle rerun terfokus. -Alur kerja child dijalankan dari ref tepercaya yang menjalankan `Full Release +matriks tahap lengkap, nama job alur kerja yang tepat, perbedaan profil stabil +versus penuh, artefak, dan pegangan rerun terfokus. +Alur kerja turunan dijalankan dari ref tepercaya yang menjalankan `Full Release Validation`, biasanya `--ref main`, bahkan ketika `ref` target menunjuk ke -cabang atau tag rilis yang lebih lama. Tidak ada input ref alur kerja Full Release Validation terpisah; pilih harness tepercaya dengan memilih ref run alur kerja. -Jangan gunakan `--ref main -f ref=` untuk bukti commit tepat pada `main` yang bergerak; -SHA commit mentah tidak dapat menjadi ref workflow dispatch, jadi gunakan -`pnpm ci:full-release --sha ` untuk membuat cabang sementara yang disematkan. +branch atau tag rilis yang lebih lama. Tidak ada input ref alur kerja Full Release Validation +terpisah; pilih harness tepercaya dengan memilih ref proses alur kerja. +Jangan gunakan `--ref main -f ref=` untuk bukti commit persis pada `main` +yang bergerak; SHA commit mentah tidak dapat menjadi ref dispatch alur kerja, jadi gunakan +`pnpm ci:full-release --sha ` untuk membuat branch sementara yang dipin. -Gunakan `release_profile` untuk memilih keluasan live/provider: +Gunakan `release_profile` untuk memilih cakupan live/penyedia: -- `minimum`: jalur OpenAI/core live dan Docker yang paling cepat dan kritis untuk rilis -- `stable`: minimum ditambah cakupan provider/backend stabil untuk persetujuan rilis -- `full`: stable ditambah cakupan luas provider/media bersifat advisori +- `minimum`: jalur live OpenAI/core dan Docker paling cepat yang kritis untuk rilis +- `stable`: minimum ditambah cakupan penyedia/backend stabil untuk persetujuan rilis +- `full`: stable ditambah cakupan penyedia/media advisory yang luas `OpenClaw Release Checks` menggunakan ref alur kerja tepercaya untuk menyelesaikan ref target -sekali sebagai `release-package-under-test` dan menggunakan kembali artefak itu dalam pemeriksaan Docker jalur rilis dan Package Acceptance. Ini menjaga semua -box yang menghadap paket berada pada byte yang sama dan menghindari build paket berulang. -OpenAI install smoke lintas-OS menggunakan `OPENCLAW_CROSS_OS_OPENAI_MODEL` saat -variabel repo/org ditetapkan, jika tidak `openai/gpt-5.4`, karena lane ini -membuktikan instalasi paket, onboarding, startup gateway, dan satu putaran agen live -bukan membandingkan model default paling lambat. Matriks provider live yang lebih luas +sekali sebagai `release-package-under-test` dan menggunakan kembali artefak itu dalam +pemeriksaan Docker jalur rilis maupun Package Acceptance. Ini menjaga semua +box yang menghadap paket pada byte yang sama dan menghindari build paket berulang. +Install smoke OpenAI lintas-OS menggunakan `OPENCLAW_CROSS_OS_OPENAI_MODEL` ketika +variabel repo/org diatur, jika tidak `openai/gpt-5.4`, karena lane ini +membuktikan instalasi paket, onboarding, startup Gateway, dan satu giliran agen live +alih-alih membenchmark model default paling lambat. Matriks penyedia live yang lebih luas tetap menjadi tempat untuk cakupan khusus model. Gunakan varian ini tergantung tahap rilis: @@ -357,38 +248,38 @@ gh workflow run full-release-validation.yml \ -f npm_telegram_provider_mode=mock-openai ``` -Jangan gunakan umbrella penuh sebagai rerun pertama setelah perbaikan terfokus. Jika satu box -gagal, gunakan alur kerja child, pekerjaan, lane Docker, profil paket, provider model, -atau lane QA yang gagal untuk bukti berikutnya. Jalankan umbrella penuh lagi hanya ketika +Jangan gunakan payung penuh sebagai rerun pertama setelah perbaikan terfokus. Jika satu box +gagal, gunakan alur kerja turunan yang gagal, job, lane Docker, profil paket, penyedia +model, atau lane QA untuk bukti berikutnya. Jalankan payung penuh lagi hanya ketika perbaikan mengubah orkestrasi rilis bersama atau membuat bukti semua-box sebelumnya -menjadi usang. Verifier akhir umbrella memeriksa ulang id run alur kerja child -yang tercatat, jadi setelah alur kerja child berhasil dijalankan ulang, jalankan ulang hanya pekerjaan parent +menjadi usang. Verifikator akhir payung memeriksa ulang id proses alur kerja turunan +yang tercatat, jadi setelah alur kerja turunan berhasil dijalankan ulang, jalankan ulang hanya job induk `Verify full validation` yang gagal. -Untuk pemulihan terbatas, teruskan `rerun_group` ke umbrella. `all` adalah run -kandidat rilis yang sebenarnya, `ci` hanya menjalankan child CI normal, `plugin-prerelease` -hanya menjalankan child plugin khusus rilis, `release-checks` menjalankan setiap box rilis, +Untuk pemulihan berbatas, berikan `rerun_group` ke payung. `all` adalah proses +kandidat rilis yang sebenarnya, `ci` hanya menjalankan turunan CI normal, `plugin-prerelease` +hanya menjalankan turunan Plugin khusus rilis, `release-checks` menjalankan setiap box rilis, dan grup rilis yang lebih sempit adalah `install-smoke`, `cross-os`, `live-e2e`, `package`, `qa`, `qa-parity`, `qa-live`, dan `npm-telegram`. -Rerun `npm-telegram` terfokus memerlukan `npm_telegram_package_spec`; run full/all +Rerun `npm-telegram` terfokus memerlukan `npm_telegram_package_spec`; proses full/all dengan `release_profile=full` menggunakan artefak paket release-checks. ### Vitest -Box Vitest adalah alur kerja child `CI` manual. CI manual sengaja -melewati cakupan changed dan memaksa grafik pengujian normal untuk kandidat rilis: -shard Linux Node, shard plugin bundel, kontrak channel, kompatibilitas Node 22, -`check`, `check-additional`, build smoke, pemeriksaan dokumen, Python -skills, Windows, macOS, Android, dan Control UI i18n. +Box Vitest adalah alur kerja turunan manual `CI`. CI manual sengaja +melewati cakupan perubahan dan memaksa graf pengujian normal untuk kandidat rilis: +shard Linux Node, shard Plugin bawaan, kontrak channel, kompatibilitas Node 22, +`check`, `check-additional`, build smoke, pemeriksaan docs, Skills Python, Windows, +macOS, Android, dan i18n Control UI. Gunakan box ini untuk menjawab "apakah source tree lulus suite pengujian normal penuh?" Ini tidak sama dengan validasi produk jalur rilis. Bukti yang perlu disimpan: -- ringkasan `Full Release Validation` yang menampilkan URL run `CI` yang dijalankan -- run `CI` hijau pada SHA target yang tepat -- nama shard yang gagal atau lambat dari pekerjaan CI saat menyelidiki regresi -- artefak timing Vitest seperti `.artifacts/vitest-shard-timings.json` saat - sebuah run membutuhkan analisis performa +- ringkasan `Full Release Validation` yang menampilkan URL proses `CI` yang dijalankan +- proses `CI` hijau pada SHA target yang persis +- nama shard yang gagal atau lambat dari job CI saat menyelidiki regresi +- artefak waktu Vitest seperti `.artifacts/vitest-shard-timings.json` ketika + sebuah proses memerlukan analisis performa Jalankan CI manual secara langsung hanya ketika rilis membutuhkan CI normal deterministik tetapi bukan box Docker, QA Lab, live, lintas-OS, atau paket: @@ -404,11 +295,11 @@ Box Docker berada di `OpenClaw Release Checks` melalui `install-smoke` mode rilis. Ini memvalidasi kandidat rilis melalui lingkungan Docker terpaket, bukan hanya pengujian tingkat sumber. -Cakupan Docker rilis mencakup: +Cakupan Docker rilis meliputi: -- install smoke penuh dengan slow Bun global install smoke diaktifkan -- persiapan/penggunaan ulang image smoke Dockerfile root berdasarkan SHA target, dengan pekerjaan QR, - root/gateway, dan installer/Bun smoke berjalan sebagai shard install-smoke terpisah +- install smoke penuh dengan smoke install global Bun yang lambat diaktifkan +- persiapan/penggunaan ulang image smoke Dockerfile root berdasarkan SHA target, dengan QR, + root/Gateway, dan job smoke installer/Bun berjalan sebagai shard install-smoke terpisah - lane E2E repositori - chunk Docker jalur rilis: `core`, `package-update-openai`, `package-update-anthropic`, `package-update-core`, `plugins-runtime-plugins`, @@ -417,56 +308,56 @@ Cakupan Docker rilis mencakup: `plugins-runtime-install-c`, `plugins-runtime-install-d`, `plugins-runtime-install-e`, `plugins-runtime-install-f`, `plugins-runtime-install-g`, dan `plugins-runtime-install-h` -- cakupan OpenWebUI di dalam chunk `plugins-runtime-services` saat diminta -- lane install/uninstall plugin bundel yang dipisah +- cakupan OpenWebUI di dalam chunk `plugins-runtime-services` ketika diminta +- lane install/uninstall Plugin bawaan yang dipisah `bundled-plugin-install-uninstall-0` hingga `bundled-plugin-install-uninstall-23` -- suite provider live/E2E dan cakupan model live Docker saat pemeriksaan rilis +- suite penyedia live/E2E dan cakupan model live Docker ketika release checks menyertakan suite live -Gunakan artefak Docker sebelum menjalankan ulang. Scheduler jalur rilis mengunggah +Gunakan artefak Docker sebelum rerun. Penjadwal jalur rilis mengunggah `.artifacts/docker-tests/` dengan log lane, `summary.json`, `failures.json`, -timing fase, JSON rencana scheduler, dan perintah rerun. Untuk pemulihan terfokus, -gunakan `docker_lanes=` pada alur kerja live/E2E reusable alih-alih +waktu fase, JSON rencana penjadwal, dan perintah rerun. Untuk pemulihan terfokus, +gunakan `docker_lanes=` pada alur kerja reusable live/E2E alih-alih menjalankan ulang semua chunk rilis. Perintah rerun yang dihasilkan menyertakan -`package_artifact_run_id` sebelumnya dan input image Docker yang disiapkan jika tersedia, sehingga +`package_artifact_run_id` sebelumnya dan input image Docker yang disiapkan ketika tersedia, sehingga lane yang gagal dapat menggunakan kembali tarball dan image GHCR yang sama. ### QA Lab Box QA Lab juga merupakan bagian dari `OpenClaw Release Checks`. Ini adalah gate rilis -perilaku agen dan tingkat channel, terpisah dari mekanika paket Vitest dan Docker. +perilaku agenik dan tingkat channel, terpisah dari mekanik paket Vitest dan Docker. -Cakupan QA Lab rilis mencakup: +Cakupan QA Lab rilis meliputi: - lane paritas mock yang membandingkan lane kandidat OpenAI dengan baseline Opus 4.6 - menggunakan paket paritas agen + menggunakan paket paritas agenik - profil QA Matrix live cepat menggunakan lingkungan `qa-live-shared` -- lane QA Telegram live menggunakan lease kredensial CI Convex -- `pnpm qa:otel:smoke` saat telemetri rilis membutuhkan bukti lokal eksplisit +- lane QA Telegram live menggunakan lease kredensial Convex CI +- `pnpm qa:otel:smoke` ketika telemetri rilis memerlukan bukti lokal eksplisit Gunakan box ini untuk menjawab "apakah rilis berperilaku benar dalam skenario QA dan alur channel live?" Simpan URL artefak untuk lane paritas, Matrix, dan Telegram -saat menyetujui rilis. Cakupan Matrix penuh tetap tersedia sebagai run QA-Lab shard manual, -bukan lane kritis rilis default. +saat menyetujui rilis. Cakupan Matrix penuh tetap tersedia sebagai proses QA-Lab +sharded manual, bukan lane default yang kritis untuk rilis. -### Package +### Paket -Box Package adalah gate produk yang dapat diinstal. Ini didukung oleh +Box Paket adalah gate produk yang dapat diinstal. Ini didukung oleh `Package Acceptance` dan resolver -`scripts/resolve-openclaw-package-candidate.mjs`. Resolver menormalkan -kandidat menjadi tarball `package-under-test` yang dikonsumsi oleh Docker E2E, memvalidasi -inventaris paket, mencatat versi paket dan SHA-256, serta menjaga -ref harness alur kerja terpisah dari ref sumber paket. +`scripts/resolve-openclaw-package-candidate.mjs`. Resolver menormalisasi +kandidat menjadi tarball `package-under-test` yang digunakan oleh Docker E2E, memvalidasi +inventaris paket, mencatat versi paket dan SHA-256, serta menjaga ref harness +alur kerja tetap terpisah dari ref sumber paket. Sumber kandidat yang didukung: - `source=npm`: `openclaw@beta`, `openclaw@latest`, atau versi rilis OpenClaw - yang tepat -- `source=ref`: pack cabang, tag, atau SHA commit penuh `package_ref` tepercaya + yang persis +- `source=ref`: kemas branch, tag, atau SHA commit penuh `package_ref` tepercaya dengan harness `workflow_ref` yang dipilih -- `source=url`: unduh `.tgz` HTTPS dengan `package_sha256` yang wajib -- `source=artifact`: gunakan kembali `.tgz` yang diunggah oleh run GitHub Actions lain +- `source=url`: unduh `.tgz` HTTPS dengan `package_sha256` wajib +- `source=artifact`: gunakan kembali `.tgz` yang diunggah oleh proses GitHub Actions lain `OpenClaw Release Checks` menjalankan Package Acceptance dengan `source=artifact`, artefak paket rilis yang disiapkan, `suite_profile=custom`, @@ -474,35 +365,34 @@ paket rilis yang disiapkan, `suite_profile=custom`, `published_upgrade_survivor_baselines=all-since-2026.4.23`, `published_upgrade_survivor_scenarios=reported-issues`, dan `telegram_mode=mock-openai`. Package Acceptance menjaga migrasi, pembaruan, pembersihan -dependensi plugin usang, fixture plugin offline, pembaruan plugin, dan QA paket Telegram +dependensi Plugin usang, fixture Plugin offline, pembaruan Plugin, dan QA paket Telegram terhadap tarball terselesaikan yang sama. Matriks upgrade mencakup setiap baseline stabil yang dipublikasikan npm dari `2026.4.23` hingga `latest`; gunakan -Package Acceptance dengan `source=npm` untuk kandidat yang sudah dikirimkan, atau +Package Acceptance dengan `source=npm` untuk kandidat yang sudah dikirim, atau `source=ref`/`source=artifact` untuk tarball npm lokal berbasis SHA sebelum publish. Ini adalah pengganti native GitHub untuk sebagian besar cakupan paket/pembaruan yang sebelumnya memerlukan -Parallels. Pemeriksaan rilis lintas-OS tetap penting untuk onboarding, -installer, dan perilaku platform khusus OS, tetapi validasi produk paket/pembaruan sebaiknya -memilih Package Acceptance. +Parallels. Pemeriksaan rilis lintas-OS tetap penting untuk onboarding khusus OS, +installer, dan perilaku platform, tetapi validasi produk paket/pembaruan sebaiknya +mengutamakan Package Acceptance. -Checklist kanonis untuk validasi pembaruan dan plugin adalah -[Menguji pembaruan dan plugin](/id/help/testing-updates-plugins). Gunakan ini saat -memutuskan lane lokal, Docker, Package Acceptance, atau release-check mana yang membuktikan -instal/update plugin, pembersihan doctor, atau perubahan migrasi paket yang dipublikasikan. +Checklist kanonis untuk validasi pembaruan dan Plugin adalah +[Menguji pembaruan dan Plugin](/id/help/testing-updates-plugins). Gunakan ini saat +menentukan lane lokal, Docker, Package Acceptance, atau release-check mana yang membuktikan +instalasi/pembaruan Plugin, pembersihan doctor, atau perubahan migrasi paket yang dipublikasikan. Migrasi pembaruan yang dipublikasikan secara menyeluruh dari setiap paket stabil `2026.4.23+` adalah alur kerja manual `Update Migration` terpisah, bukan bagian dari Full Release CI. Kelonggaran package-acceptance lama sengaja dibatasi waktu. Paket hingga `2026.4.25` dapat menggunakan jalur kompatibilitas untuk celah metadata yang sudah dipublikasikan ke npm: entri inventaris QA privat yang hilang dari tarball, `gateway install --wrapper` -yang hilang, file patch yang hilang dalam fixture git turunan tarball, -`update.channel` tersimpan yang hilang, lokasi install-record plugin lama, -persistensi install-record marketplace yang hilang, dan migrasi metadata konfigurasi -selama `plugins update`. Paket `2026.4.26` yang dipublikasikan dapat memperingatkan -untuk file stempel metadata build lokal yang sudah dikirimkan. Paket setelahnya -harus memenuhi kontrak paket modern; celah yang sama tersebut menggagalkan validasi -rilis. +yang hilang, file patch yang hilang di fixture git turunan tarball, `update.channel` +persisten yang hilang, lokasi catatan instalasi Plugin lama, persistensi catatan instalasi +marketplace yang hilang, dan migrasi metadata konfigurasi selama `plugins update`. Paket +`2026.4.26` yang dipublikasikan dapat memberi peringatan untuk file cap metadata build lokal +yang sudah dikirim. Paket berikutnya harus memenuhi kontrak paket modern; celah yang sama +menggagalkan validasi rilis. -Gunakan profil Package Acceptance yang lebih luas ketika pertanyaan rilis berkaitan dengan +Gunakan profil Package Acceptance yang lebih luas ketika pertanyaan rilis adalah tentang paket aktual yang dapat diinstal: ```bash @@ -517,30 +407,32 @@ gh workflow run package-acceptance.yml \ Profil paket umum: -- `smoke`: lane cepat instalasi paket/channel/agen, jaringan gateway, dan muat ulang konfigurasi -- `package`: kontrak paket instalasi/pembaruan/plugin tanpa ClawHub live; ini adalah default release-check -- `product`: `package` ditambah channel MCP, pembersihan cron/subagen, pencarian web OpenAI, - dan OpenWebUI +- `smoke`: lane instalasi paket/channel/agen cepat, jaringan Gateway, dan reload + konfigurasi +- `package`: kontrak instalasi/pembaruan/Plugin paket tanpa ClawHub live; ini adalah default + release-check +- `product`: `package` ditambah channel MCP, pembersihan cron/subagen, pencarian web + OpenAI, dan OpenWebUI - `full`: chunk jalur rilis Docker dengan OpenWebUI -- `custom`: daftar `docker_lanes` tepat untuk rerun terfokus +- `custom`: daftar `docker_lanes` persis untuk rerun terfokus -Untuk bukti Telegram kandidat paket, aktifkan `telegram_mode=mock-openai` atau -`telegram_mode=live-frontier` pada Package Acceptance. Alur kerja meneruskan tarball -`package-under-test` yang telah diselesaikan ke lane Telegram; alur kerja Telegram -mandiri masih menerima spesifikasi npm yang sudah dipublikasikan untuk pemeriksaan pascapublikasi. +Untuk pembuktian Telegram kandidat paket, aktifkan `telegram_mode=mock-openai` atau +`telegram_mode=live-frontier` pada Package Acceptance. Workflow meneruskan tarball +`package-under-test` yang telah di-resolve ke lane Telegram; workflow Telegram +mandiri tetap menerima spesifikasi npm yang sudah dipublikasikan untuk pemeriksaan pascapublikasi. -## Otomasi publikasi rilis +## Otomatisasi publikasi rilis -`OpenClaw Release Publish` adalah titik masuk publikasi bermutasi yang normal. Ini -mengorkestrasi alur kerja trusted-publisher sesuai urutan yang dibutuhkan rilis: +`OpenClaw Release Publish` adalah entrypoint publikasi bermutasi yang normal. Ini +mengorkestrasi workflow trusted-publisher dalam urutan yang dibutuhkan rilis: -1. Check out tag rilis dan selesaikan SHA commit-nya. -2. Verifikasi bahwa tag dapat dijangkau dari `main` atau `release/*`. +1. Check out tag rilis dan resolve SHA commit-nya. +2. Verifikasi tag dapat dijangkau dari `main` atau `release/*`. 3. Jalankan `pnpm plugins:sync:check`. 4. Dispatch `Plugin NPM Release` dengan `publish_scope=all-publishable` dan `ref=`. -5. Dispatch `Plugin ClawHub Release` dengan scope dan SHA yang sama. -6. Dispatch `OpenClaw NPM Release` dengan tag rilis, dist-tag npm, dan +5. Dispatch `Plugin ClawHub Release` dengan cakupan dan SHA yang sama. +6. Dispatch `OpenClaw NPM Release` dengan tag rilis, npm dist-tag, dan `preflight_run_id` yang tersimpan. Contoh publikasi beta: @@ -553,16 +445,6 @@ gh workflow run openclaw-release-publish.yml \ -f npm_dist_tag=beta ``` -Contoh publikasi alfa: - -```bash -gh workflow run openclaw-release-publish.yml \ - --ref release/YYYY.M.D \ - -f tag=vYYYY.M.D-alpha.N \ - -f preflight_run_id= \ - -f npm_dist_tag=alpha -``` - Publikasi stabil ke dist-tag beta default: ```bash @@ -583,91 +465,90 @@ gh workflow run openclaw-release-publish.yml \ -f npm_dist_tag=latest ``` -Gunakan alur kerja tingkat lebih rendah `Plugin NPM Release` dan `Plugin ClawHub Release` -hanya untuk pekerjaan perbaikan atau publikasi ulang yang terfokus. Untuk perbaikan plugin -terpilih, berikan `plugin_publish_scope=selected` dan `plugins=@openclaw/name` ke -`OpenClaw Release Publish`, atau dispatch alur kerja anak secara langsung ketika paket +Gunakan workflow tingkat lebih rendah `Plugin NPM Release` dan `Plugin ClawHub Release` +hanya untuk pekerjaan perbaikan atau publikasi ulang yang terfokus. Untuk perbaikan Plugin terpilih, teruskan +`plugin_publish_scope=selected` dan `plugins=@openclaw/name` ke +`OpenClaw Release Publish`, atau dispatch workflow anak secara langsung ketika paket OpenClaw tidak boleh dipublikasikan. -## Input alur kerja NPM +## Input workflow NPM `OpenClaw NPM Release` menerima input yang dikendalikan operator berikut: - `tag`: tag rilis wajib seperti `v2026.4.2`, `v2026.4.2-1`, atau - `v2026.4.2-alpha.1` atau `v2026.4.2-beta.1`; ketika `preflight_only=true`, ini juga boleh berupa - SHA commit lengkap 40 karakter saat ini dari cabang alur kerja untuk preflight khusus validasi -- `preflight_only`: `true` hanya untuk validasi/build/paket, `false` untuk - jalur publikasi sebenarnya -- `preflight_run_id`: wajib pada jalur publikasi sebenarnya agar alur kerja memakai ulang - tarball yang sudah disiapkan dari run preflight yang berhasil -- `npm_dist_tag`: tag target npm untuk jalur publikasi; default ke `beta` + `v2026.4.2-beta.1`; ketika `preflight_only=true`, ini juga dapat berupa SHA commit + branch workflow 40 karakter penuh saat ini untuk preflight khusus validasi +- `preflight_only`: `true` hanya untuk validasi/build/paket, `false` untuk jalur + publikasi sebenarnya +- `preflight_run_id`: wajib pada jalur publikasi sebenarnya agar workflow menggunakan kembali + tarball yang disiapkan dari proses preflight yang berhasil +- `npm_dist_tag`: tag target npm untuk jalur publikasi; default-nya `beta` `OpenClaw Release Publish` menerima input yang dikendalikan operator berikut: - `tag`: tag rilis wajib; harus sudah ada -- `preflight_run_id`: id run preflight `OpenClaw NPM Release` yang berhasil; +- `preflight_run_id`: id proses preflight `OpenClaw NPM Release` yang berhasil; wajib ketika `publish_openclaw_npm=true` - `npm_dist_tag`: tag target npm untuk paket OpenClaw -- `plugin_publish_scope`: default ke `all-publishable`; gunakan `selected` hanya +- `plugin_publish_scope`: default-nya `all-publishable`; gunakan `selected` hanya untuk pekerjaan perbaikan yang terfokus - `plugins`: nama paket `@openclaw/*` yang dipisahkan koma ketika `plugin_publish_scope=selected` -- `publish_openclaw_npm`: default ke `true`; atur `false` hanya ketika menggunakan - alur kerja sebagai orkestrator perbaikan khusus plugin +- `publish_openclaw_npm`: default-nya `true`; atur `false` hanya ketika menggunakan + workflow sebagai orkestrator perbaikan khusus Plugin `OpenClaw Release Checks` menerima input yang dikendalikan operator berikut: -- `ref`: cabang, tag, atau SHA commit lengkap yang akan divalidasi. Pemeriksaan yang - membawa secret mensyaratkan commit yang diselesaikan dapat dijangkau dari cabang - OpenClaw atau tag rilis. +- `ref`: branch, tag, atau SHA commit penuh yang akan divalidasi. Pemeriksaan yang membawa secret + mengharuskan commit yang di-resolve dapat dijangkau dari branch OpenClaw atau + tag rilis. Aturan: -- Tag stabil dan koreksi boleh dipublikasikan ke `beta` atau `latest` -- Tag prarilis alfa hanya boleh dipublikasikan ke `alpha` +- Tag stabil dan koreksi dapat dipublikasikan ke `beta` atau `latest` - Tag prarilis beta hanya boleh dipublikasikan ke `beta` -- Untuk `OpenClaw NPM Release`, input SHA commit lengkap hanya diizinkan ketika +- Untuk `OpenClaw NPM Release`, input SHA commit penuh hanya diizinkan ketika `preflight_only=true` - `OpenClaw Release Checks` dan `Full Release Validation` selalu - hanya validasi -- Jalur publikasi sebenarnya harus menggunakan `npm_dist_tag` yang sama dengan yang digunakan saat preflight; - alur kerja memverifikasi metadata tersebut sebelum publikasi berlanjut + hanya untuk validasi +- Jalur publikasi sebenarnya harus menggunakan `npm_dist_tag` yang sama dengan yang digunakan selama preflight; + workflow memverifikasi metadata tersebut sebelum publikasi berlanjut ## Urutan rilis npm stabil Saat membuat rilis npm stabil: 1. Jalankan `OpenClaw NPM Release` dengan `preflight_only=true` - - Sebelum tag ada, Anda boleh menggunakan SHA commit lengkap saat ini dari cabang alur kerja - untuk dry run khusus validasi atas alur kerja preflight -2. Pilih `npm_dist_tag=beta` untuk alur normal beta terlebih dahulu, atau `latest` hanya + - Sebelum tag ada, Anda dapat menggunakan SHA commit branch workflow penuh saat ini + untuk dry run khusus validasi dari workflow preflight +2. Pilih `npm_dist_tag=beta` untuk alur normal beta-terlebih-dahulu, atau `latest` hanya ketika Anda sengaja menginginkan publikasi stabil langsung -3. Jalankan `Full Release Validation` pada cabang rilis, tag rilis, atau SHA - commit lengkap ketika Anda menginginkan CI normal plus cakupan live prompt cache, Docker, QA Lab, - Matrix, dan Telegram dari satu alur kerja manual -4. Jika Anda sengaja hanya membutuhkan graf pengujian normal deterministik, jalankan - alur kerja `CI` manual pada ref rilis sebagai gantinya +3. Jalankan `Full Release Validation` pada branch rilis, tag rilis, atau SHA + commit penuh ketika Anda menginginkan CI normal ditambah cakupan live prompt cache, Docker, QA Lab, + Matrix, dan Telegram dari satu workflow manual +4. Jika Anda sengaja hanya membutuhkan graph pengujian normal yang deterministik, jalankan + workflow manual `CI` pada ref rilis sebagai gantinya 5. Simpan `preflight_run_id` yang berhasil 6. Jalankan `OpenClaw Release Publish` dengan `tag` yang sama, `npm_dist_tag` yang sama, - dan `preflight_run_id` yang tersimpan; ini memublikasikan plugin yang dieksternalisasi ke npm + dan `preflight_run_id` yang tersimpan; ini memublikasikan Plugin yang dieksternalisasi ke npm dan ClawHub sebelum mempromosikan paket npm OpenClaw -7. Jika rilis mendarat di `beta`, gunakan alur kerja privat +7. Jika rilis mendarat di `beta`, gunakan workflow privat `openclaw/releases-private/.github/workflows/openclaw-npm-dist-tags.yml` untuk mempromosikan versi stabil tersebut dari `beta` ke `latest` 8. Jika rilis sengaja dipublikasikan langsung ke `latest` dan `beta` - harus segera mengikuti build stabil yang sama, gunakan alur kerja privat yang sama - untuk mengarahkan kedua dist-tag ke versi stabil, atau biarkan sinkronisasi self-healing - terjadwalnya memindahkan `beta` nanti + harus segera mengikuti build stabil yang sama, gunakan workflow privat yang sama + untuk mengarahkan kedua dist-tag ke versi stabil, atau biarkan sinkronisasi + self-healing terjadwalnya memindahkan `beta` nanti Mutasi dist-tag berada di repo privat demi keamanan karena masih memerlukan `NPM_TOKEN`, sementara repo publik mempertahankan publikasi hanya OIDC. -Itu membuat jalur publikasi langsung dan jalur promosi beta terlebih dahulu sama-sama +Itu membuat jalur publikasi langsung dan jalur promosi beta-terlebih-dahulu sama-sama terdokumentasi dan terlihat oleh operator. Jika maintainer harus fallback ke autentikasi npm lokal, jalankan perintah CLI 1Password -(`op`) apa pun hanya di dalam sesi tmux khusus. Jangan panggil `op` -langsung dari shell agen utama; menjaganya di dalam tmux membuat prompt, +(`op`) hanya di dalam sesi tmux khusus. Jangan panggil `op` +langsung dari shell agen utama; menyimpannya di dalam tmux membuat prompt, peringatan, dan penanganan OTP dapat diamati serta mencegah peringatan host berulang. ## Referensi publik diff --git a/docs/id/web/control-ui.md b/docs/id/web/control-ui.md index 1105e85d1..673706390 100644 --- a/docs/id/web/control-ui.md +++ b/docs/id/web/control-ui.md @@ -1,25 +1,25 @@ --- read_when: - - Anda ingin mengoperasikan Gateway dari peramban + - Anda ingin mengoperasikan Gateway dari browser - Anda menginginkan akses Tailnet tanpa tunnel SSH sidebarTitle: Control UI -summary: Antarmuka kontrol berbasis browser untuk Gateway (obrolan, node, konfigurasi) +summary: UI kontrol berbasis browser untuk Gateway (obrolan, simpul, konfigurasi) title: Antarmuka Kontrol x-i18n: - generated_at: "2026-05-02T21:01:46Z" + generated_at: "2026-05-02T23:39:14Z" model: gpt-5.5 provider: openai - source_hash: 88959ccf435b31015039bf28c3043023d99f0b953a1489986ab2d0cbd261771c + source_hash: 50bef807915f27406e19f1c6ca7d839a610d79ba79da85d7a78523400cbf9208 source_path: web/control-ui.md workflow: 16 --- -UI Kontrol adalah aplikasi satu halaman kecil berbasis **Vite + Lit** yang disajikan oleh Gateway: +Control UI adalah aplikasi satu halaman kecil berbasis **Vite + Lit** yang disajikan oleh Gateway: - default: `http://:18789/` -- prefiks opsional: atur `gateway.controlUi.basePath` (misalnya `/openclaw`) +- prefiks opsional: atur `gateway.controlUi.basePath` (mis. `/openclaw`) -Aplikasi ini berbicara **langsung ke WebSocket Gateway** pada port yang sama. +Aplikasi ini berkomunikasi **langsung dengan Gateway WebSocket** pada port yang sama. ## Buka cepat (lokal) @@ -27,22 +27,22 @@ Jika Gateway berjalan di komputer yang sama, buka: - [http://127.0.0.1:18789/](http://127.0.0.1:18789/) (atau [http://localhost:18789/](http://localhost:18789/)) -Jika halaman gagal dimuat, mulai Gateway terlebih dahulu: `openclaw gateway`. +Jika halaman gagal dimuat, jalankan Gateway terlebih dahulu: `openclaw gateway`. -Auth disediakan selama handshake WebSocket melalui: +Auth diberikan selama handshake WebSocket melalui: - `connect.params.auth.token` - `connect.params.auth.password` - header identitas Tailscale Serve saat `gateway.auth.allowTailscale: true` -- header identitas proxy tepercaya saat `gateway.auth.mode: "trusted-proxy"` +- header identitas trusted-proxy saat `gateway.auth.mode: "trusted-proxy"` Panel pengaturan dasbor menyimpan token untuk sesi tab browser saat ini dan URL gateway yang dipilih; kata sandi tidak dipertahankan. Onboarding biasanya menghasilkan token gateway untuk auth rahasia bersama pada koneksi pertama, tetapi auth kata sandi juga berfungsi saat `gateway.auth.mode` adalah `"password"`. -## Pemasangan perangkat (koneksi pertama) +## Pairing perangkat (koneksi pertama) -Saat Anda terhubung ke UI Kontrol dari browser atau perangkat baru, Gateway biasanya memerlukan **persetujuan pemasangan satu kali**. Ini adalah langkah keamanan untuk mencegah akses tanpa izin. +Saat Anda terhubung ke Control UI dari browser atau perangkat baru, Gateway biasanya memerlukan **persetujuan pairing satu kali**. Ini adalah langkah keamanan untuk mencegah akses tanpa izin. -**Yang akan Anda lihat:** "terputus (1008): pemasangan diperlukan" +**Yang akan Anda lihat:** "disconnected (1008): pairing required" @@ -57,159 +57,161 @@ Saat Anda terhubung ke UI Kontrol dari browser atau perangkat baru, Gateway bias -Jika browser mencoba ulang pemasangan dengan detail auth yang berubah (peran/cakupan/kunci publik), permintaan tertunda sebelumnya digantikan dan `requestId` baru dibuat. Jalankan ulang `openclaw devices list` sebelum persetujuan. +Jika browser mencoba ulang pairing dengan detail auth yang berubah (peran/cakupan/kunci publik), permintaan tertunda sebelumnya akan digantikan dan `requestId` baru dibuat. Jalankan ulang `openclaw devices list` sebelum menyetujui. -Jika browser sudah dipasangkan dan Anda mengubahnya dari akses baca menjadi akses tulis/admin, ini diperlakukan sebagai peningkatan persetujuan, bukan koneksi ulang diam-diam. OpenClaw menjaga persetujuan lama tetap aktif, memblokir koneksi ulang yang lebih luas, dan meminta Anda menyetujui kumpulan cakupan baru secara eksplisit. +Jika browser sudah dipasangkan dan Anda mengubahnya dari akses baca menjadi akses tulis/admin, ini diperlakukan sebagai peningkatan persetujuan, bukan koneksi ulang diam-diam. OpenClaw mempertahankan persetujuan lama tetap aktif, memblokir koneksi ulang yang lebih luas, dan meminta Anda menyetujui kumpulan cakupan baru secara eksplisit. Setelah disetujui, perangkat akan diingat dan tidak akan memerlukan persetujuan ulang kecuali Anda mencabutnya dengan `openclaw devices revoke --device --role `. Lihat [CLI Perangkat](/id/cli/devices) untuk rotasi dan pencabutan token. - Koneksi browser local loopback langsung (`127.0.0.1` / `localhost`) disetujui otomatis. -- Tailscale Serve dapat melewati perjalanan bolak-balik pemasangan untuk sesi operator UI Kontrol saat `gateway.auth.allowTailscale: true`, identitas Tailscale terverifikasi, dan browser menyajikan identitas perangkatnya. -- Binding Tailnet langsung, koneksi browser LAN, dan profil browser tanpa identitas perangkat tetap memerlukan persetujuan eksplisit. -- Setiap profil browser menghasilkan ID perangkat unik, jadi berganti browser atau menghapus data browser akan memerlukan pemasangan ulang. +- Tailscale Serve dapat melewati perjalanan bolak-balik pairing untuk sesi operator Control UI saat `gateway.auth.allowTailscale: true`, identitas Tailscale terverifikasi, dan browser menampilkan identitas perangkatnya. +- Bind Tailnet langsung, koneksi browser LAN, dan profil browser tanpa identitas perangkat tetap memerlukan persetujuan eksplisit. +- Setiap profil browser menghasilkan ID perangkat unik, jadi mengganti browser atau menghapus data browser akan memerlukan pairing ulang. ## Identitas pribadi (lokal browser) -UI Kontrol mendukung identitas pribadi per browser (nama tampilan dan avatar) yang dilampirkan ke pesan keluar untuk atribusi dalam sesi bersama. Identitas ini berada di penyimpanan browser, dicakup ke profil browser saat ini, dan tidak disinkronkan ke perangkat lain atau dipertahankan di sisi server selain metadata kepengarangan transkrip normal pada pesan yang benar-benar Anda kirim. Menghapus data situs atau berganti browser akan mengaturnya kembali menjadi kosong. +Control UI mendukung identitas pribadi per browser (nama tampilan dan avatar) yang dilampirkan ke pesan keluar untuk atribusi dalam sesi bersama. Identitas ini berada di penyimpanan browser, dicakup ke profil browser saat ini, dan tidak disinkronkan ke perangkat lain atau dipertahankan di sisi server selain metadata kepengarangan transkrip normal pada pesan yang benar-benar Anda kirim. Menghapus data situs atau mengganti browser akan meresetnya menjadi kosong. -Pola lokal browser yang sama berlaku untuk override avatar asisten. Avatar asisten yang diunggah melapisi identitas yang di-resolve gateway hanya pada browser lokal dan tidak pernah bolak-balik melalui `config.patch`. Kolom konfigurasi bersama `ui.assistant.avatar` tetap tersedia untuk klien non-UI yang menulis kolom tersebut secara langsung (seperti gateway terskrip atau dasbor khusus). +Pola lokal browser yang sama berlaku untuk override avatar asisten. Avatar asisten yang diunggah menimpa identitas yang diselesaikan gateway hanya pada browser lokal dan tidak pernah melakukan round-trip melalui `config.patch`. Field config bersama `ui.assistant.avatar` tetap tersedia untuk klien non-UI yang menulis field tersebut secara langsung (seperti gateway berskrip atau dasbor kustom). -## Endpoint konfigurasi runtime +## Endpoint config runtime -UI Kontrol mengambil pengaturan runtime-nya dari `/__openclaw/control-ui-config.json`. Endpoint tersebut dijaga oleh auth gateway yang sama seperti permukaan HTTP lainnya: browser yang tidak terautentikasi tidak dapat mengambilnya, dan pengambilan yang berhasil memerlukan token/kata sandi gateway yang sudah valid, identitas Tailscale Serve, atau identitas proxy tepercaya. +Control UI mengambil pengaturan runtimenya dari `/__openclaw/control-ui-config.json`. Endpoint tersebut dijaga oleh auth gateway yang sama seperti bagian HTTP lainnya: browser yang tidak terautentikasi tidak dapat mengambilnya, dan pengambilan yang berhasil memerlukan token/kata sandi gateway yang sudah valid, identitas Tailscale Serve, atau identitas trusted-proxy. ## Dukungan bahasa -UI Kontrol dapat melokalkan dirinya sendiri saat pemuatan pertama berdasarkan locale browser Anda. Untuk menimpanya nanti, buka **Ikhtisar -> Akses Gateway -> Bahasa**. Pemilih locale berada di kartu Akses Gateway, bukan di bawah Tampilan. +Control UI dapat melokalkan dirinya saat pemuatan pertama berdasarkan lokal browser Anda. Untuk mengubahnya nanti, buka **Overview -> Gateway Access -> Language**. Pemilih lokal berada di kartu Gateway Access, bukan di bawah Appearance. -- Locale yang didukung: `en`, `zh-CN`, `zh-TW`, `pt-BR`, `de`, `es`, `ja-JP`, `ko`, `fr`, `ar`, `it`, `tr`, `uk`, `id`, `pl`, `th`, `vi`, `nl`, `fa` -- Terjemahan non-Inggris dimuat secara malas di browser. -- Locale yang dipilih disimpan di penyimpanan browser dan digunakan ulang pada kunjungan mendatang. -- Kunci terjemahan yang hilang kembali ke bahasa Inggris. +- Lokal yang didukung: `en`, `zh-CN`, `zh-TW`, `pt-BR`, `de`, `es`, `ja-JP`, `ko`, `fr`, `ar`, `it`, `tr`, `uk`, `id`, `pl`, `th`, `vi`, `nl`, `fa` +- Terjemahan non-Inggris dimuat secara lazy di browser. +- Lokal yang dipilih disimpan di penyimpanan browser dan digunakan kembali pada kunjungan berikutnya. +- Kunci terjemahan yang hilang fallback ke bahasa Inggris. -Terjemahan dokumen dibuat untuk set locale non-Inggris yang sama, tetapi pemilih bahasa bawaan situs dokumen Mintlify terbatas pada kode locale yang diterima Mintlify. Dokumen Thai (`th`) dan Persian (`fa`) tetap dibuat di repo publikasi; keduanya mungkin belum muncul di pemilih tersebut sampai Mintlify mendukung kode-kode itu. +Terjemahan dokumen dibuat untuk set lokal non-Inggris yang sama, tetapi pemilih bahasa bawaan situs dokumen Mintlify terbatas pada kode lokal yang diterima Mintlify. Dokumen Thai (`th`) dan Persian (`fa`) tetap dibuat di repo publikasi; keduanya mungkin tidak muncul di pemilih tersebut sampai Mintlify mendukung kode-kode itu. ## Tema tampilan -Panel Tampilan mempertahankan tema bawaan Claw, Knot, dan Dash, ditambah satu slot impor tweakcn lokal browser. Untuk mengimpor tema, buka [tema tweakcn](https://tweakcn.com/themes), pilih atau buat tema, klik **Bagikan**, dan tempel tautan tema yang disalin ke Tampilan. Pengimpor juga menerima URL registry `https://tweakcn.com/r/themes/`, URL editor seperti `https://tweakcn.com/editor/theme?theme=amethyst-haze`, path relatif `/themes/`, ID tema mentah, dan nama tema default seperti `amethyst-haze`. +Panel Appearance mempertahankan tema bawaan Claw, Knot, dan Dash, ditambah satu slot impor tweakcn lokal browser. Untuk mengimpor tema, buka [tema tweakcn](https://tweakcn.com/themes), pilih atau buat tema, klik **Share**, lalu tempel tautan tema yang disalin ke Appearance. Pengimpor juga menerima URL registri `https://tweakcn.com/r/themes/`, URL editor seperti `https://tweakcn.com/editor/theme?theme=amethyst-haze`, path relatif `/themes/`, ID tema mentah, dan nama tema default seperti `amethyst-haze`. -Tema yang diimpor hanya disimpan di profil browser saat ini. Tema tersebut tidak ditulis ke konfigurasi gateway dan tidak disinkronkan antarperangkat. Mengganti tema yang diimpor akan memperbarui satu slot lokal; menghapusnya mengalihkan tema aktif kembali ke Claw jika tema yang diimpor sedang dipilih. +Tema yang diimpor hanya disimpan di profil browser saat ini. Tema tidak ditulis ke config gateway dan tidak disinkronkan antarperangkat. Mengganti tema yang diimpor akan memperbarui satu slot lokal; menghapusnya mengalihkan tema aktif kembali ke Claw jika tema yang diimpor sedang dipilih. -## Yang dapat dilakukan (saat ini) +## Yang dapat dilakukannya (saat ini) - Chat dengan model melalui Gateway WS (`chat.history`, `chat.send`, `chat.abort`, `chat.inject`). - - Bicara melalui sesi realtime browser. OpenAI menggunakan WebRTC langsung, Google Live menggunakan token browser sekali pakai terbatas melalui WebSocket, dan plugin suara realtime khusus backend menggunakan transport relai Gateway. Relai menjaga kredensial provider di Gateway sementara browser melakukan streaming PCM mikrofon melalui RPC `talk.realtime.relay*` dan mengirim panggilan alat `openclaw_agent_consult` kembali melalui `chat.send` untuk model OpenClaw terkonfigurasi yang lebih besar. - - Streaming panggilan alat + kartu output alat langsung di Chat (event agen). + - Dikte ke komposer Chat dengan STT sisi server (`chat.transcribeAudio`). Browser merekam klip mikrofon pendek dan mengirimkannya ke Gateway, yang menjalankan pipeline transkripsi `tools.media.audio` yang dikonfigurasi dan mengembalikan teks draf tanpa mengekspos kredensial penyedia ke browser. + - Bicara melalui sesi realtime browser. OpenAI menggunakan WebRTC langsung, Google Live menggunakan token browser sekali pakai terbatas melalui WebSocket, dan plugin suara realtime khusus backend menggunakan transport relay Gateway. Relay mempertahankan kredensial penyedia di Gateway sementara browser melakukan streaming PCM mikrofon melalui RPC `talk.realtime.relay*` dan mengirim panggilan alat `openclaw_agent_consult` kembali melalui `chat.send` untuk model OpenClaw lebih besar yang dikonfigurasi. + - Streaming panggilan alat + kartu output alat live di Chat (event agen). - - Channel: status channel bawaan plus plugin bundled/eksternal, login QR, dan konfigurasi per channel (`channels.status`, `web.login.*`, `config.patch`). + - Channel: status channel bawaan serta channel plugin bundel/eksternal, login QR, dan config per channel (`channels.status`, `web.login.*`, `config.patch`). - Instans: daftar kehadiran + refresh (`system-presence`). - Sesi: daftar + override model/thinking/fast/verbose/trace/reasoning per sesi (`sessions.list`, `sessions.patch`). - - Dream: status dreaming, toggle aktifkan/nonaktifkan, dan pembaca Dream Diary (`doctor.memory.status`, `doctor.memory.dreamDiary`, `config.patch`). + - Dream: status dreaming, toggle aktif/nonaktif, dan pembaca Dream Diary (`doctor.memory.status`, `doctor.memory.dreamDiary`, `config.patch`). - - - Pekerjaan Cron: daftar/tambah/edit/jalankan/aktifkan/nonaktifkan + riwayat eksekusi (`cron.*`). - - Skills: status, aktifkan/nonaktifkan, pasang, pembaruan kunci API (`skills.*`). + + - Job Cron: daftar/tambah/edit/jalankan/aktifkan/nonaktifkan + riwayat eksekusi (`cron.*`). + - Skills: status, aktifkan/nonaktifkan, instal, pembaruan kunci API (`skills.*`). - Node: daftar + kapabilitas (`node.list`). - - Persetujuan exec: edit daftar izinkan gateway atau node + kebijakan tanya untuk `exec host=gateway/node` (`exec.approvals.*`). + - Persetujuan exec: edit allowlist gateway atau node + kebijakan tanya untuk `exec host=gateway/node` (`exec.approvals.*`). - + - Lihat/edit `~/.openclaw/openclaw.json` (`config.get`, `config.set`). - Terapkan + mulai ulang dengan validasi (`config.apply`) dan bangunkan sesi aktif terakhir. - - Penulisan menyertakan penjaga hash dasar untuk mencegah penimpaan edit serentak. - - Penulisan (`config.set`/`config.apply`/`config.patch`) melakukan preflight resolusi SecretRef aktif untuk ref dalam payload konfigurasi yang dikirimkan; ref aktif yang dikirimkan dan tidak dapat di-resolve ditolak sebelum penulisan. - - Skema + rendering formulir (`config.schema` / `config.schema.lookup`, termasuk `title` / `description` kolom, hint UI yang cocok, ringkasan anak langsung, metadata dokumen pada node objek bertingkat/wildcard/array/komposisi, plus skema plugin + channel jika tersedia); editor JSON mentah hanya tersedia saat snapshot memiliki round-trip mentah yang aman. - - Jika snapshot tidak dapat melakukan round-trip teks mentah dengan aman, UI Kontrol memaksa mode Formulir dan menonaktifkan mode Mentah untuk snapshot tersebut. - - Editor JSON mentah "Reset ke tersimpan" mempertahankan bentuk yang ditulis mentah (pemformatan, komentar, tata letak `$include`) alih-alih merender ulang snapshot yang diratakan, sehingga edit eksternal tetap bertahan setelah reset saat snapshot dapat melakukan round-trip dengan aman. - - Nilai objek SecretRef terstruktur dirender baca-saja dalam input teks formulir untuk mencegah kerusakan objek-ke-string yang tidak disengaja. + - Penulisan menyertakan guard hash dasar untuk mencegah penimpaan edit bersamaan. + - Penulisan (`config.set`/`config.apply`/`config.patch`) melakukan preflight resolusi SecretRef aktif untuk ref dalam payload config yang dikirim; ref terkirim aktif yang tidak terselesaikan ditolak sebelum penulisan. + - Schema + rendering formulir (`config.schema` / `config.schema.lookup`, termasuk field `title` / `description`, hint UI yang cocok, ringkasan child langsung, metadata dokumen pada node objek bertingkat/wildcard/array/komposisi, plus schema plugin + channel saat tersedia); editor Raw JSON hanya tersedia saat snapshot memiliki round-trip mentah yang aman. + - Jika snapshot tidak dapat melakukan round-trip teks mentah dengan aman, Control UI memaksa mode Form dan menonaktifkan mode Raw untuk snapshot tersebut. + - Editor Raw JSON "Reset to saved" mempertahankan bentuk yang ditulis mentah (format, komentar, tata letak `$include`) alih-alih merender ulang snapshot yang diratakan, sehingga edit eksternal tetap bertahan setelah reset saat snapshot dapat melakukan round-trip dengan aman. + - Nilai objek SecretRef terstruktur dirender hanya-baca dalam input teks formulir untuk mencegah kerusakan objek-ke-string yang tidak disengaja. - Debug: snapshot status/health/model + log event + panggilan RPC manual (`status`, `health`, `models.list`). - - Log: tail langsung log file gateway dengan filter/ekspor (`logs.tail`). - - Pembaruan: jalankan pembaruan paket/git + mulai ulang (`update.run`) dengan laporan mulai ulang, lalu polling `update.status` setelah koneksi ulang untuk memverifikasi versi gateway yang berjalan. + - Log: tail live log file gateway dengan filter/ekspor (`logs.tail`). + - Pembaruan: jalankan pembaruan package/git + mulai ulang (`update.run`) dengan laporan mulai ulang, lalu polling `update.status` setelah koneksi ulang untuk memverifikasi versi gateway yang sedang berjalan. - - - Untuk pekerjaan terisolasi, pengiriman default adalah mengumumkan ringkasan. Anda dapat beralih ke none jika menginginkan eksekusi hanya internal. - - Kolom channel/target muncul saat announce dipilih. + + - Untuk job terisolasi, delivery default adalah mengumumkan ringkasan. Anda dapat mengalihkannya ke none jika menginginkan eksekusi hanya internal. + - Field channel/target muncul saat announce dipilih. - Mode Webhook menggunakan `delivery.mode = "webhook"` dengan `delivery.to` diatur ke URL webhook HTTP(S) yang valid. - - Untuk pekerjaan sesi utama, mode pengiriman webhook dan none tersedia. - - Kontrol edit lanjutan mencakup hapus-setelah-jalan, hapus override agen, opsi cron exact/stagger, override model/thinking agen, dan toggle pengiriman best-effort. - - Validasi formulir bersifat inline dengan error tingkat kolom; nilai tidak valid menonaktifkan tombol simpan sampai diperbaiki. + - Untuk job sesi utama, mode delivery webhook dan none tersedia. + - Kontrol edit lanjutan mencakup delete-after-run, hapus override agen, opsi cron exact/stagger, override model/thinking agen, dan toggle delivery best-effort. + - Validasi formulir bersifat inline dengan error tingkat field; nilai yang tidak valid menonaktifkan tombol simpan sampai diperbaiki. - Atur `cron.webhookToken` untuk mengirim token bearer khusus; jika dihilangkan, webhook dikirim tanpa header auth. - - Fallback usang: pekerjaan legacy tersimpan dengan `notify: true` masih dapat menggunakan `cron.webhook` sampai dimigrasikan. + - Fallback usang: job lama yang tersimpan dengan `notify: true` masih dapat menggunakan `cron.webhook` sampai dimigrasikan. -## Perilaku chat +## Perilaku Chat - - - `chat.send` bersifat **non-blocking**: langsung mengirim ack dengan `{ runId, status: "started" }` dan respons dialirkan melalui peristiwa `chat`. - - Unggahan chat menerima gambar serta file non-video. Gambar mempertahankan jalur gambar native; file lain disimpan sebagai media terkelola dan ditampilkan dalam riwayat sebagai tautan lampiran. - - Mengirim ulang dengan `idempotencyKey` yang sama mengembalikan `{ status: "in_flight" }` saat masih berjalan, dan `{ status: "ok" }` setelah selesai. - - Respons `chat.history` dibatasi ukurannya demi keamanan UI. Saat entri transkrip terlalu besar, Gateway dapat memangkas kolom teks yang panjang, menghilangkan blok metadata berat, dan mengganti pesan berukuran terlalu besar dengan placeholder (`[chat.history omitted: message too large]`). - - Gambar assistant/yang dihasilkan dipertahankan sebagai referensi media terkelola dan disajikan kembali melalui URL media Gateway yang terautentikasi, sehingga pemuatan ulang tidak bergantung pada payload gambar base64 mentah yang tetap berada dalam respons riwayat chat. - - `chat.history` juga menghapus tag direktif inline khusus tampilan dari teks assistant yang terlihat (misalnya `[[reply_to_*]]` dan `[[audio_as_voice]]`), payload XML pemanggilan tool teks biasa (termasuk `...`, `...`, `...`, `...`, dan blok pemanggilan tool yang terpangkas), serta token kontrol model ASCII/full-width yang bocor, dan menghilangkan entri assistant yang seluruh teks terlihatnya hanya token senyap persis `NO_REPLY` / `no_reply`. - - Selama pengiriman aktif dan refresh riwayat akhir, tampilan chat tetap menampilkan pesan user/assistant optimistis lokal jika `chat.history` sebentar mengembalikan snapshot yang lebih lama; transkrip kanonis menggantikan pesan lokal tersebut setelah riwayat Gateway menyusul. - - `chat.inject` menambahkan catatan assistant ke transkrip sesi dan menyiarkan peristiwa `chat` untuk pembaruan khusus UI (tanpa run agent, tanpa pengiriman channel). - - Picker model dan thinking di header chat langsung menambal sesi aktif melalui `sessions.patch`; keduanya adalah override sesi persisten, bukan opsi kirim sekali giliran. + + - `chat.send` bersifat **non-blocking**: langsung mengakui dengan `{ runId, status: "started" }` dan respons mengalir melalui peristiwa `chat`. + - `chat.transcribeAudio` adalah pembantu dikte sekali jalan untuk draf Chat. Ini menerima audio base64 yang direkam browser, menjaga unggahan tetap di bawah batas bingkai WebSocket Gateway, menulis file lokal sementara, menjalankan transkripsi audio pemahaman-media dengan konfigurasi Gateway aktif, mengembalikan `{ text, provider, model }`, dan menghapus file sementara. Ini tidak membuat agent run dan terpisah dari Talk realtime. + - Unggahan Chat menerima gambar serta file non-video. Gambar mempertahankan jalur gambar native; file lain disimpan sebagai media terkelola dan ditampilkan dalam riwayat sebagai tautan lampiran. + - Mengirim ulang dengan `idempotencyKey` yang sama mengembalikan `{ status: "in_flight" }` saat berjalan, dan `{ status: "ok" }` setelah selesai. + - Respons `chat.history` dibatasi ukurannya demi keamanan UI. Ketika entri transkrip terlalu besar, Gateway dapat memotong field teks panjang, menghilangkan blok metadata berat, dan mengganti pesan yang terlalu besar dengan placeholder (`[chat.history omitted: message too large]`). + - Gambar assistant/yang dihasilkan dipersistenkan sebagai referensi media terkelola dan disajikan kembali melalui URL media Gateway terautentikasi, sehingga pemuatan ulang tidak bergantung pada payload gambar base64 mentah yang tetap ada di respons riwayat chat. + - `chat.history` juga menghapus tag direktif inline khusus tampilan dari teks assistant yang terlihat (misalnya `[[reply_to_*]]` dan `[[audio_as_voice]]`), payload XML pemanggilan tool teks polos (termasuk `...`, `...`, `...`, `...`, dan blok pemanggilan tool yang terpotong), serta token kontrol model ASCII/lebar-penuh yang bocor, dan menghilangkan entri assistant yang seluruh teks terlihatnya hanya token senyap persis `NO_REPLY` / `no_reply`. + - Selama pengiriman aktif dan penyegaran riwayat akhir, tampilan chat mempertahankan pesan lokal optimistis dari pengguna/assistant tetap terlihat jika `chat.history` sebentar mengembalikan snapshot yang lebih lama; transkrip kanonis menggantikan pesan lokal tersebut setelah riwayat Gateway menyusul. + - `chat.inject` menambahkan catatan assistant ke transkrip sesi dan menyiarkan peristiwa `chat` untuk pembaruan khusus UI (tanpa agent run, tanpa pengiriman channel). + - Pemilih model dan thinking di header chat segera mem-patch sesi aktif melalui `sessions.patch`; keduanya adalah override sesi persisten, bukan opsi pengiriman satu giliran saja. - Mengetik `/new` di Control UI membuat dan beralih ke sesi dashboard baru yang sama seperti New Chat. Mengetik `/reset` mempertahankan reset eksplisit di tempat milik Gateway untuk sesi saat ini. - - Picker model chat meminta tampilan model yang dikonfigurasi Gateway. Jika `agents.defaults.models` ada, allowlist tersebut mengendalikan picker. Jika tidak, picker menampilkan entri eksplisit `models.providers.*.models` plus penyedia dengan auth yang dapat digunakan. Katalog lengkap tetap tersedia melalui RPC debug `models.list` dengan `view: "all"`. - - Saat laporan penggunaan sesi Gateway baru menunjukkan tekanan konteks yang tinggi, area composer chat menampilkan pemberitahuan konteks dan, pada level Compaction yang direkomendasikan, tombol ringkas yang menjalankan jalur Compaction sesi normal. Snapshot token usang disembunyikan hingga Gateway melaporkan penggunaan baru lagi. + - Pemilih model chat meminta tampilan model yang dikonfigurasi Gateway. Jika `agents.defaults.models` ada, allowlist tersebut menggerakkan pemilih. Jika tidak, pemilih menampilkan entri eksplisit `models.providers.*.models` plus provider dengan auth yang dapat digunakan. Katalog lengkap tetap tersedia melalui RPC debug `models.list` dengan `view: "all"`. + - Ketika laporan penggunaan sesi Gateway baru menunjukkan tekanan konteks yang tinggi, area komposer chat menampilkan pemberitahuan konteks dan, pada level Compaction yang direkomendasikan, tombol ringkas yang menjalankan jalur Compaction sesi normal. Snapshot token usang disembunyikan sampai Gateway kembali melaporkan penggunaan baru. - - Mode bicara menggunakan penyedia suara realtime terdaftar. Konfigurasikan OpenAI dengan `talk.provider: "openai"` plus `talk.providers.openai.apiKey`, atau konfigurasikan Google dengan `talk.provider: "google"` plus `talk.providers.google.apiKey`; konfigurasi penyedia realtime Voice Call masih dapat digunakan ulang sebagai fallback. Browser tidak pernah menerima kunci API penyedia standar. OpenAI menerima secret klien Realtime sementara untuk WebRTC. Google Live menerima token auth Live API terbatas sekali pakai untuk sesi WebSocket browser, dengan instruksi dan deklarasi tool yang dikunci ke dalam token oleh Gateway. Penyedia yang hanya mengekspos bridge realtime backend berjalan melalui transport relay Gateway, sehingga kredensial dan soket vendor tetap berada di sisi server sementara audio browser bergerak melalui RPC Gateway yang terautentikasi. Prompt sesi Realtime dirakit oleh Gateway; `talk.realtime.session` tidak menerima override instruksi yang diberikan pemanggil. + + Mode Talk menggunakan provider suara realtime terdaftar. Konfigurasikan OpenAI dengan `talk.provider: "openai"` plus `talk.providers.openai.apiKey`, atau konfigurasikan Google dengan `talk.provider: "google"` plus `talk.providers.google.apiKey`; konfigurasi provider realtime Voice Call masih dapat digunakan kembali sebagai fallback. Browser tidak pernah menerima kunci API provider standar. OpenAI menerima rahasia klien Realtime sementara untuk WebRTC. Google Live menerima token auth Live API terbatas sekali pakai untuk sesi WebSocket browser, dengan instruksi dan deklarasi tool dikunci ke dalam token oleh Gateway. Provider yang hanya mengekspos bridge realtime backend berjalan melalui transport relay Gateway, sehingga kredensial dan soket vendor tetap di sisi server sementara audio browser bergerak melalui RPC Gateway terautentikasi. Prompt sesi Realtime dirakit oleh Gateway; `talk.realtime.session` tidak menerima override instruksi yang disediakan pemanggil. - Di composer Chat, kontrol Talk adalah tombol gelombang di sebelah tombol dikte mikrofon. Saat Talk dimulai, baris status composer menampilkan `Connecting Talk...`, lalu `Talk live` saat audio tersambung, atau `Asking OpenClaw...` saat pemanggilan tool realtime sedang berkonsultasi dengan model lebih besar yang dikonfigurasi melalui `chat.send`. + Di komposer Chat, kontrol Talk adalah tombol gelombang di sebelah tombol dikte mikrofon. Saat Talk dimulai, baris status komposer menampilkan `Connecting Talk...`, lalu `Talk live` ketika audio tersambung, atau `Asking OpenClaw...` saat pemanggilan tool realtime sedang berkonsultasi dengan model yang lebih besar yang dikonfigurasi melalui `chat.send`. - Smoke live maintainer: `OPENAI_API_KEY=... GEMINI_API_KEY=... node --import tsx scripts/dev/realtime-talk-live-smoke.ts` memverifikasi pertukaran SDP WebRTC browser OpenAI, penyiapan WebSocket browser token terbatas Google Live, dan adaptor browser relay Gateway dengan media mikrofon palsu. Perintah hanya mencetak status penyedia dan tidak mencatat secret. + Smoke live maintainer: `OPENAI_API_KEY=... GEMINI_API_KEY=... node --import tsx scripts/dev/realtime-talk-live-smoke.ts` memverifikasi pertukaran SDP WebRTC browser OpenAI, penyiapan WebSocket browser token-terbatas Google Live, dan adaptor browser relay Gateway dengan media mikrofon palsu. Perintah ini hanya mencetak status provider dan tidak mencatat secret. - + - Klik **Stop** (memanggil `chat.abort`). - - Saat run aktif, follow-up normal akan masuk antrean. Klik **Steer** pada pesan yang diantrekan untuk menyuntikkan follow-up tersebut ke giliran yang sedang berjalan. - - Ketik `/stop` (atau frasa abort mandiri seperti `stop`, `stop action`, `stop run`, `stop openclaw`, `please stop`) untuk membatalkan di luar jalur. + - Saat run aktif, tindak lanjut normal masuk antrean. Klik **Steer** pada pesan yang diantrekan untuk menyuntikkan tindak lanjut tersebut ke giliran yang sedang berjalan. + - Ketik `/stop` (atau frasa pembatalan mandiri seperti `stop`, `stop action`, `stop run`, `stop openclaw`, `please stop`) untuk membatalkan di luar band. - `chat.abort` mendukung `{ sessionKey }` (tanpa `runId`) untuk membatalkan semua run aktif untuk sesi tersebut. - - - Saat run dibatalkan, teks assistant parsial masih dapat ditampilkan di UI. - - Gateway mempertahankan teks assistant parsial yang dibatalkan ke riwayat transkrip saat output buffered ada. - - Entri yang dipertahankan menyertakan metadata abort sehingga konsumen transkrip dapat membedakan parsial abort dari output penyelesaian normal. + + - Ketika run dibatalkan, teks assistant parsial masih dapat ditampilkan di UI. + - Gateway mempersistenkan teks assistant parsial yang dibatalkan ke riwayat transkrip ketika output yang dibuffer ada. + - Entri yang dipersistenkan menyertakan metadata pembatalan sehingga konsumen transkrip dapat membedakan parsial pembatalan dari output penyelesaian normal. -## Instalasi PWA dan web push +## Instal PWA dan web push -Control UI menyertakan `manifest.webmanifest` dan service worker, sehingga browser modern dapat memasangnya sebagai PWA mandiri. Web Push memungkinkan Gateway membangunkan PWA yang terpasang dengan notifikasi bahkan saat tab atau jendela browser tidak terbuka. +Control UI menyertakan `manifest.webmanifest` dan service worker, sehingga browser modern dapat menginstalnya sebagai PWA mandiri. Web Push memungkinkan Gateway membangunkan PWA terpasang dengan notifikasi bahkan ketika tab atau jendela browser tidak terbuka. | Permukaan | Fungsinya | | ----------------------------------------------------- | ------------------------------------------------------------------ | | `ui/public/manifest.webmanifest` | Manifest PWA. Browser menawarkan "Install app" setelah dapat dijangkau. | | `ui/public/sw.js` | Service worker yang menangani peristiwa `push` dan klik notifikasi. | -| `push/vapid-keys.json` (di bawah direktori state OpenClaw) | Pasangan kunci VAPID yang dibuat otomatis untuk menandatangani payload Web Push. | -| `push/web-push-subscriptions.json` | Endpoint langganan browser yang dipertahankan. | +| `push/vapid-keys.json` (di bawah direktori state OpenClaw) | Keypair VAPID yang dibuat otomatis untuk menandatangani payload Web Push. | +| `push/web-push-subscriptions.json` | Endpoint langganan browser yang dipersistenkan. | -Override pasangan kunci VAPID melalui env var pada proses Gateway saat Anda ingin menetapkan kunci (untuk deployment multi-host, rotasi secret, atau pengujian): +Override keypair VAPID melalui env var pada proses Gateway saat Anda ingin menetapkan kunci (untuk deployment multi-host, rotasi secret, atau pengujian): - `OPENCLAW_VAPID_PUBLIC_KEY` - `OPENCLAW_VAPID_PRIVATE_KEY` - `OPENCLAW_VAPID_SUBJECT` (default ke `mailto:openclaw@localhost`) -Control UI menggunakan metode Gateway yang dibatasi scope ini untuk mendaftarkan dan menguji langganan browser: +Control UI menggunakan metode Gateway yang dibatasi cakupan ini untuk mendaftarkan dan menguji langganan browser: - `push.web.vapidPublicKey` — mengambil kunci publik VAPID aktif. - `push.web.subscribe` — mendaftarkan `endpoint` plus `keys.p256dh`/`keys.auth`. @@ -217,21 +219,21 @@ Control UI menggunakan metode Gateway yang dibatasi scope ini untuk mendaftarkan - `push.web.test` — mengirim notifikasi uji ke langganan pemanggil. -Web Push bersifat independen dari jalur relay APNS iOS (lihat [Configuration](/id/gateway/configuration) untuk push berbasis relay) dan metode `push.test` yang ada, yang menargetkan pairing mobile native. +Web Push independen dari jalur relay APNS iOS (lihat [Konfigurasi](/id/gateway/configuration) untuk push berbasis relay) dan metode `push.test` yang sudah ada, yang menargetkan pairing mobile native. -## Embed ter-hosting +## Embed yang dihosting -Pesan assistant dapat merender konten web ter-hosting secara inline dengan shortcode `[embed ...]`. Kebijakan sandbox iframe dikendalikan oleh `gateway.controlUi.embedSandbox`: +Pesan assistant dapat merender konten web yang dihosting secara inline dengan shortcode `[embed ...]`. Kebijakan sandbox iframe dikontrol oleh `gateway.controlUi.embedSandbox`: - - Menonaktifkan eksekusi skrip di dalam embed ter-hosting. + + Menonaktifkan eksekusi script di dalam embed yang dihosting. Mengizinkan embed interaktif sambil mempertahankan isolasi origin; ini adalah default dan biasanya cukup untuk game/widget browser mandiri. - + Menambahkan `allow-same-origin` di atas `allow-scripts` untuk dokumen same-site yang memang membutuhkan privilege lebih kuat. @@ -249,14 +251,14 @@ Contoh: ``` -Gunakan `trusted` hanya saat dokumen tertanam benar-benar membutuhkan perilaku same-origin. Untuk sebagian besar game yang dihasilkan agent dan kanvas interaktif, `scripts` adalah pilihan yang lebih aman. +Gunakan `trusted` hanya ketika dokumen yang di-embed benar-benar membutuhkan perilaku same-origin. Untuk sebagian besar game dan kanvas interaktif yang dibuat agent, `scripts` adalah pilihan yang lebih aman. -URL embed eksternal absolut `http(s)` tetap diblokir secara default. Jika Anda memang ingin `[embed url="https://..."]` memuat halaman pihak ketiga, setel `gateway.controlUi.allowExternalEmbedUrls: true`. +URL embed eksternal absolut `http(s)` tetap diblokir secara default. Jika Anda sengaja ingin `[embed url="https://..."]` memuat halaman pihak ketiga, atur `gateway.controlUi.allowExternalEmbedUrls: true`. ## Lebar pesan chat -Pesan chat berkelompok menggunakan max-width default yang mudah dibaca. Deployment monitor lebar dapat meng-override-nya tanpa menambal CSS bawaan dengan menyetel `gateway.controlUi.chatMessageMaxWidth`: +Pesan chat yang dikelompokkan menggunakan max-width default yang mudah dibaca. Deployment monitor lebar dapat meng-override-nya tanpa menambal CSS bawaan dengan mengatur `gateway.controlUi.chatMessageMaxWidth`: ```json5 { @@ -268,13 +270,13 @@ Pesan chat berkelompok menggunakan max-width default yang mudah dibaca. Deployme } ``` -Nilai divalidasi sebelum mencapai browser. Nilai yang didukung mencakup panjang dan persentase polos seperti `960px` atau `82%`, plus ekspresi lebar terbatas `min(...)`, `max(...)`, `clamp(...)`, `calc(...)`, dan `fit-content(...)`. +Nilai divalidasi sebelum mencapai browser. Nilai yang didukung mencakup panjang polos dan persentase seperti `960px` atau `82%`, plus ekspresi lebar terbatas `min(...)`, `max(...)`, `clamp(...)`, `calc(...)`, dan `fit-content(...)`. ## Akses tailnet (direkomendasikan) - - Pertahankan Gateway pada loopback dan biarkan Tailscale Serve mem-proxy-nya dengan HTTPS: + + Pertahankan Gateway di loopback dan biarkan Tailscale Serve mem-proxy-nya dengan HTTPS: ```bash openclaw gateway --tailscale serve @@ -282,25 +284,25 @@ Nilai divalidasi sebelum mencapai browser. Nilai yang didukung mencakup panjang Buka: - - `https:///` (atau `gateway.controlUi.basePath` yang Anda konfigurasi) + - `https:///` (atau `gateway.controlUi.basePath` yang Anda konfigurasikan) - Secara default, permintaan Control UI/WebSocket Serve dapat melakukan autentikasi melalui header identitas Tailscale (`tailscale-user-login`) saat `gateway.auth.allowTailscale` bernilai `true`. OpenClaw memverifikasi identitas dengan me-resolve alamat `x-forwarded-for` menggunakan `tailscale whois` dan mencocokkannya dengan header, serta hanya menerimanya saat permintaan mencapai loopback dengan header `x-forwarded-*` milik Tailscale. Untuk sesi operator Control UI dengan identitas perangkat browser, jalur Serve terverifikasi ini juga melewati perjalanan pulang-pergi pairing perangkat; browser tanpa perangkat dan koneksi peran node tetap mengikuti pemeriksaan perangkat normal. Setel `gateway.auth.allowTailscale: false` jika Anda ingin mewajibkan kredensial shared-secret eksplisit bahkan untuk traffic Serve. Lalu gunakan `gateway.auth.mode: "token"` atau `"password"`. + Secara default, permintaan Control UI/WebSocket Serve dapat berautentikasi melalui header identitas Tailscale (`tailscale-user-login`) saat `gateway.auth.allowTailscale` bernilai `true`. OpenClaw memverifikasi identitas dengan me-resolve alamat `x-forwarded-for` menggunakan `tailscale whois` dan mencocokkannya dengan header, serta hanya menerimanya ketika permintaan mengenai loopback dengan header `x-forwarded-*` milik Tailscale. Untuk sesi operator Control UI dengan identitas perangkat browser, jalur Serve terverifikasi ini juga melewati putaran pairing perangkat; browser tanpa perangkat dan koneksi node-role tetap mengikuti pemeriksaan perangkat normal. Atur `gateway.auth.allowTailscale: false` jika Anda ingin mewajibkan kredensial shared-secret eksplisit bahkan untuk traffic Serve. Lalu gunakan `gateway.auth.mode: "token"` atau `"password"`. - Untuk jalur identitas Serve async tersebut, upaya auth gagal untuk IP klien dan scope auth yang sama diserialkan sebelum penulisan rate-limit. Karena itu, retry buruk yang bersamaan dari browser yang sama dapat menampilkan `retry later` pada permintaan kedua, bukan dua mismatch polos yang berpacu secara paralel. + Untuk jalur identitas Serve asinkron tersebut, upaya auth yang gagal untuk IP klien dan cakupan auth yang sama diserialisasi sebelum penulisan rate-limit. Karena itu, retry buruk secara bersamaan dari browser yang sama dapat menampilkan `retry later` pada permintaan kedua alih-alih dua mismatch polos yang berlomba paralel. Auth Serve tanpa token mengasumsikan host gateway tepercaya. Jika kode lokal yang tidak tepercaya dapat berjalan pada host tersebut, wajibkan auth token/password. - + ```bash openclaw gateway --bind tailnet --token "$(openssl rand -hex 32)" ``` Lalu buka: - - `http://:18789/` (atau `gateway.controlUi.basePath` yang Anda konfigurasi) + - `http://:18789/` (atau `gateway.controlUi.basePath` yang Anda konfigurasikan) Tempel shared secret yang cocok ke pengaturan UI (dikirim sebagai `connect.params.auth.token` atau `connect.params.auth.password`). @@ -314,16 +316,16 @@ Jika Anda membuka dashboard melalui HTTP polos (`http://` atau `http://< Pengecualian terdokumentasi: - kompatibilitas HTTP tidak aman khusus localhost dengan `gateway.controlUi.allowInsecureAuth=true` -- auth Control UI operator yang berhasil melalui `gateway.auth.mode: "trusted-proxy"` +- autentikasi Control UI operator yang berhasil melalui `gateway.auth.mode: "trusted-proxy"` - break-glass `gateway.controlUi.dangerouslyDisableDeviceAuth=true` **Perbaikan yang direkomendasikan:** gunakan HTTPS (Tailscale Serve) atau buka UI secara lokal: - `https:///` (Serve) -- `http://127.0.0.1:18789/` (pada host gateway) +- `http://127.0.0.1:18789/` (di host gateway) - + ```json5 { gateway: { @@ -334,14 +336,14 @@ Pengecualian terdokumentasi: } ``` - `allowInsecureAuth` hanyalah toggle kompatibilitas lokal: + `allowInsecureAuth` hanya toggle kompatibilitas lokal: - Ini memungkinkan sesi Control UI localhost berlanjut tanpa identitas perangkat dalam konteks HTTP yang tidak aman. - Ini tidak melewati pemeriksaan pairing. - Ini tidak melonggarkan persyaratan identitas perangkat jarak jauh (non-localhost). - + ```json5 { gateway: { @@ -358,9 +360,9 @@ Pengecualian terdokumentasi: - - Auth trusted-proxy yang berhasil dapat mengizinkan sesi Control UI **operator** tanpa identitas perangkat. - - Ini **tidak** berlaku untuk sesi Control UI dengan peran node. - - Proksi balik loopback pada host yang sama tetap tidak memenuhi auth trusted-proxy; lihat [Auth trusted proxy](/id/gateway/trusted-proxy-auth). + - Autentikasi trusted-proxy yang berhasil dapat menerima sesi Control UI **operator** tanpa identitas perangkat. + - Ini **tidak** berlaku untuk sesi Control UI berperan node. + - Proxy balik loopback pada host yang sama tetap tidak memenuhi autentikasi trusted-proxy; lihat [Autentikasi proxy tepercaya](/id/gateway/trusted-proxy-auth). @@ -369,26 +371,26 @@ Lihat [Tailscale](/id/gateway/tailscale) untuk panduan penyiapan HTTPS. ## Kebijakan keamanan konten -Control UI dikirimkan dengan kebijakan `img-src` yang ketat: hanya aset **same-origin**, URL `data:`, dan URL `blob:` yang dibuat secara lokal yang diizinkan. URL gambar jarak jauh `http(s)` dan relatif-protokol ditolak oleh browser dan tidak melakukan pengambilan jaringan. +Control UI dikirimkan dengan kebijakan `img-src` yang ketat: hanya aset **same-origin**, URL `data:`, dan URL `blob:` yang dihasilkan secara lokal yang diizinkan. URL gambar `http(s)` jarak jauh dan relatif protokol ditolak oleh browser dan tidak memicu pengambilan jaringan. Artinya dalam praktik: -- Avatar dan gambar yang disajikan di bawah path relatif (misalnya `/avatars/`) tetap dirender, termasuk rute avatar terautentikasi yang diambil UI dan dikonversi menjadi URL `blob:` lokal. -- URL inline `data:image/...` tetap dirender (berguna untuk payload dalam protokol). +- Avatar dan gambar yang disajikan di bawah jalur relatif (misalnya `/avatars/`) tetap dirender, termasuk rute avatar terautentikasi yang diambil UI lalu dikonversi menjadi URL `blob:` lokal. +- URL `data:image/...` inline tetap dirender (berguna untuk payload dalam protokol). - URL `blob:` lokal yang dibuat oleh Control UI tetap dirender. -- URL avatar jarak jauh yang dipancarkan oleh metadata channel dihapus di helper avatar Control UI dan diganti dengan logo/badge bawaan, sehingga channel yang disusupi atau berbahaya tidak dapat memaksa pengambilan gambar jarak jauh sembarang dari browser operator. +- URL avatar jarak jauh yang dikeluarkan oleh metadata channel dibuang di helper avatar Control UI dan diganti dengan logo/badge bawaan, sehingga channel yang disusupi atau berbahaya tidak dapat memaksa pengambilan gambar jarak jauh sembarang dari browser operator. Anda tidak perlu mengubah apa pun untuk mendapatkan perilaku ini — ini selalu aktif dan tidak dapat dikonfigurasi. -## Auth rute avatar +## Autentikasi rute avatar -Ketika auth gateway dikonfigurasi, endpoint avatar Control UI memerlukan token gateway yang sama seperti API lainnya: +Ketika autentikasi gateway dikonfigurasi, endpoint avatar Control UI memerlukan token gateway yang sama seperti API lainnya: - `GET /avatar/` mengembalikan gambar avatar hanya kepada pemanggil terautentikasi. `GET /avatar/?meta=1` mengembalikan metadata avatar dengan aturan yang sama. -- Permintaan tidak terautentikasi ke salah satu rute ditolak (sesuai dengan rute assistant-media yang bersebelahan). Ini mencegah rute avatar membocorkan identitas agen pada host yang sebaliknya dilindungi. +- Permintaan tidak terautentikasi ke salah satu rute ditolak (selaras dengan rute assistant-media saudaranya). Ini mencegah rute avatar membocorkan identitas agen pada host yang sebaliknya dilindungi. - Control UI sendiri meneruskan token gateway sebagai header bearer saat mengambil avatar, dan menggunakan URL blob terautentikasi sehingga gambar tetap dirender di dasbor. -Jika Anda menonaktifkan auth gateway (tidak direkomendasikan pada host bersama), rute avatar juga menjadi tidak terautentikasi, selaras dengan gateway lainnya. +Jika Anda menonaktifkan autentikasi gateway (tidak direkomendasikan pada host bersama), rute avatar juga menjadi tidak terautentikasi, sejalan dengan gateway lainnya. ## Membangun UI @@ -398,7 +400,7 @@ Gateway menyajikan file statis dari `dist/control-ui`. Bangun dengan: pnpm ui:build ``` -Basis absolut opsional (ketika Anda menginginkan URL aset tetap): +Base absolut opsional (ketika Anda menginginkan URL aset tetap): ```bash OPENCLAW_CONTROL_UI_BASE_PATH=/openclaw/ pnpm ui:build @@ -410,11 +412,11 @@ Untuk pengembangan lokal (server dev terpisah): pnpm ui:dev ``` -Lalu arahkan UI ke URL WS Gateway Anda (mis. `ws://127.0.0.1:18789`). +Lalu arahkan UI ke URL WS Gateway Anda (misalnya `ws://127.0.0.1:18789`). ## Debugging/pengujian: server dev + Gateway jarak jauh -Control UI adalah file statis; target WebSocket dapat dikonfigurasi dan dapat berbeda dari origin HTTP. Ini berguna ketika Anda ingin server dev Vite berjalan secara lokal tetapi Gateway berjalan di tempat lain. +Control UI adalah file statis; target WebSocket dapat dikonfigurasi dan dapat berbeda dari origin HTTP. Ini berguna ketika Anda ingin server dev Vite berjalan lokal tetapi Gateway berjalan di tempat lain. @@ -427,7 +429,7 @@ Control UI adalah file statis; target WebSocket dapat dikonfigurasi dan dapat be http://localhost:5173/?gatewayUrl=ws%3A%2F%2F%3A18789 ``` - Auth satu kali opsional (jika diperlukan): + Autentikasi satu kali opsional (jika diperlukan): ```text http://localhost:5173/?gatewayUrl=wss%3A%2F%2F%3A18789#token= @@ -439,14 +441,14 @@ Control UI adalah file statis; target WebSocket dapat dikonfigurasi dan dapat be - `gatewayUrl` disimpan di localStorage setelah dimuat dan dihapus dari URL. - - Jika Anda meneruskan endpoint `ws://` atau `wss://` penuh melalui `gatewayUrl`, encode URL nilai `gatewayUrl` agar browser mengurai string kueri dengan benar. - - `token` sebaiknya diteruskan melalui fragmen URL (`#token=...`) bila memungkinkan. Fragmen tidak dikirim ke server, sehingga menghindari kebocoran log permintaan dan Referer. Param kueri lama `?token=` masih diimpor satu kali untuk kompatibilitas, tetapi hanya sebagai fallback, dan langsung dihapus setelah bootstrap. + - Jika Anda meneruskan endpoint `ws://` atau `wss://` lengkap melalui `gatewayUrl`, encode URL nilai `gatewayUrl` agar browser mengurai string kueri dengan benar. + - `token` sebaiknya diteruskan melalui fragmen URL (`#token=...`) bila memungkinkan. Fragmen tidak dikirim ke server, sehingga menghindari kebocoran log permintaan dan Referer. Parameter kueri legacy `?token=` masih diimpor sekali untuk kompatibilitas, tetapi hanya sebagai fallback, dan langsung dihapus setelah bootstrap. - `password` hanya disimpan di memori. - - Ketika `gatewayUrl` disetel, UI tidak fallback ke kredensial konfigurasi atau lingkungan. Berikan `token` (atau `password`) secara eksplisit. Kredensial eksplisit yang hilang adalah kesalahan. - - Gunakan `wss://` ketika Gateway berada di belakang TLS (Tailscale Serve, proksi HTTPS, dll.). + - Ketika `gatewayUrl` ditetapkan, UI tidak melakukan fallback ke kredensial konfigurasi atau lingkungan. Berikan `token` (atau `password`) secara eksplisit. Kredensial eksplisit yang hilang adalah error. + - Gunakan `wss://` ketika Gateway berada di belakang TLS (Tailscale Serve, proxy HTTPS, dll.). - `gatewayUrl` hanya diterima di jendela tingkat atas (tidak disematkan) untuk mencegah clickjacking. - - Deployment Control UI non-loopback harus menetapkan `gateway.controlUi.allowedOrigins` secara eksplisit (origin penuh). Ini mencakup penyiapan dev jarak jauh. - - Startup Gateway dapat menyemai origin lokal seperti `http://localhost:` dan `http://127.0.0.1:` dari bind dan port runtime efektif, tetapi origin browser jarak jauh tetap memerlukan entri eksplisit. + - Deployment Control UI non-loopback harus menetapkan `gateway.controlUi.allowedOrigins` secara eksplisit (origin lengkap). Ini termasuk setup dev jarak jauh. + - Startup Gateway dapat menanam origin lokal seperti `http://localhost:` dan `http://127.0.0.1:` dari bind dan port runtime efektif, tetapi origin browser jarak jauh tetap membutuhkan entri eksplisit. - Jangan gunakan `gateway.controlUi.allowedOrigins: ["*"]` kecuali untuk pengujian lokal yang dikontrol ketat. Itu berarti mengizinkan origin browser apa pun, bukan "cocokkan host apa pun yang saya gunakan." - `gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=true` mengaktifkan mode fallback origin header Host, tetapi ini adalah mode keamanan yang berbahaya. diff --git a/docs/id/web/webchat.md b/docs/id/web/webchat.md index 59031624f..2c91701bb 100644 --- a/docs/id/web/webchat.md +++ b/docs/id/web/webchat.md @@ -1,13 +1,13 @@ --- read_when: - - Menelusuri kesalahan atau mengonfigurasi akses WebChat -summary: Host statis WebChat loopback dan penggunaan WS Gateway untuk UI obrolan -title: Obrolan Web + - Men-debug atau mengonfigurasi akses WebChat +summary: Host statis WebChat loopback dan penggunaan WS Gateway untuk antarmuka obrolan +title: Chat Web x-i18n: - generated_at: "2026-05-02T09:35:56Z" + generated_at: "2026-05-02T23:39:09Z" model: gpt-5.5 provider: openai - source_hash: fe6d3cb30ed18d651b0d0ca8fd188b47c5f1d186410ee340deb79315f194ed8d + source_hash: ad3a09c8962e3a6dda83716d319df7ba27e18105cee50721278b5cba0a85c52f source_path: web/webchat.md workflow: 16 --- @@ -17,52 +17,53 @@ Status: UI chat SwiftUI macOS/iOS berkomunikasi langsung dengan Gateway WebSocke ## Apa ini - UI chat native untuk gateway (tanpa browser tertanam dan tanpa server statis lokal). -- Menggunakan sesi dan aturan perutean yang sama seperti channel lain. +- Menggunakan sesi dan aturan perutean yang sama seperti kanal lain. - Perutean deterministik: balasan selalu kembali ke WebChat. ## Mulai cepat -1. Jalankan gateway. +1. Mulai gateway. 2. Buka UI WebChat (aplikasi macOS/iOS) atau tab chat Control UI. -3. Pastikan jalur auth gateway yang valid telah dikonfigurasi (shared-secret secara default, +3. Pastikan jalur autentikasi gateway yang valid telah dikonfigurasi (shared-secret secara default, bahkan pada loopback). ## Cara kerjanya (perilaku) -- UI terhubung ke Gateway WebSocket dan menggunakan `chat.history`, `chat.send`, dan `chat.inject`. -- `chat.history` dibatasi untuk stabilitas: Gateway dapat memotong kolom teks panjang, menghilangkan metadata berat, dan mengganti entri yang terlalu besar dengan `[chat.history omitted: message too large]`. -- `chat.history` mengikuti cabang transkrip aktif untuk file sesi append-only modern, sehingga cabang penulisan ulang yang ditinggalkan dan salinan prompt yang tergantikan tidak dirender di WebChat. -- Control UI mengingat Gateway `sessionId` pendukung yang dikembalikan oleh `chat.history` dan menyertakannya pada panggilan lanjutan `chat.send`, sehingga koneksi ulang dan penyegaran halaman melanjutkan percakapan tersimpan yang sama kecuali pengguna memulai atau mereset sesi. -- Control UI menggabungkan submit dalam proses yang duplikat untuk sesi, pesan, dan lampiran yang sama sebelum membuat id run `chat.send` baru; Gateway tetap melakukan dedupe pada permintaan berulang yang memakai kembali kunci idempotensi yang sama. +- UI terhubung ke Gateway WebSocket dan menggunakan `chat.history`, `chat.send`, `chat.inject`, dan `chat.transcribeAudio`. +- `chat.history` dibatasi demi stabilitas: Gateway dapat memotong kolom teks panjang, menghilangkan metadata berat, dan mengganti entri yang terlalu besar dengan `[chat.history omitted: message too large]`. +- `chat.history` mengikuti cabang transkrip aktif untuk file sesi append-only modern, sehingga cabang penulisan ulang yang ditinggalkan dan salinan prompt yang sudah digantikan tidak dirender di WebChat. +- Control UI mengingat Gateway `sessionId` dasar yang dikembalikan oleh `chat.history` dan menyertakannya pada panggilan lanjutan `chat.send`, sehingga koneksi ulang dan penyegaran halaman melanjutkan percakapan tersimpan yang sama kecuali pengguna memulai atau mereset sesi. +- Control UI menggabungkan submit in-flight duplikat untuk sesi, pesan, dan lampiran yang sama sebelum menghasilkan id run `chat.send` baru; Gateway tetap melakukan dedupe pada permintaan berulang yang menggunakan ulang kunci idempotensi yang sama. - `chat.history` juga dinormalisasi untuk tampilan: konteks OpenClaw khusus runtime, - pembungkus envelope masuk, tag directive pengiriman inline - seperti `[[reply_to_*]]` dan `[[audio_as_voice]]`, payload XML tool-call teks biasa + pembungkus envelope masuk, tag arahan pengiriman inline + seperti `[[reply_to_*]]` dan `[[audio_as_voice]]`, payload XML panggilan alat teks biasa (termasuk `...`, `...`, `...`, - `...`, dan blok tool-call yang terpotong), serta + `...`, dan blok panggilan alat yang terpotong), serta token kontrol model ASCII/full-width yang bocor dihapus dari teks yang terlihat, - dan entri assistant yang seluruh teks terlihatnya hanya token senyap persis + dan entri asisten yang seluruh teks terlihatnya hanya token senyap persis `NO_REPLY` / `no_reply` dihilangkan. -- Payload balasan bertanda reasoning (`isReasoning: true`) dikecualikan dari konten assistant WebChat, teks replay transkrip, dan blok konten audio, sehingga payload khusus berpikir tidak muncul sebagai pesan assistant yang terlihat atau audio yang dapat diputar. -- `chat.inject` menambahkan catatan assistant langsung ke transkrip dan menyiarkannya ke UI (tanpa run agent). -- Run yang dibatalkan dapat tetap menampilkan output assistant parsial di UI. -- Gateway menyimpan teks assistant parsial yang dibatalkan ke dalam riwayat transkrip saat output buffer tersedia, dan menandai entri tersebut dengan metadata pembatalan. +- Payload balasan yang ditandai sebagai penalaran (`isReasoning: true`) dikecualikan dari konten asisten WebChat, teks pemutaran ulang transkrip, dan blok konten audio, sehingga payload khusus pemikiran tidak muncul sebagai pesan asisten yang terlihat atau audio yang dapat diputar. +- `chat.transcribeAudio` menjalankan dikte sisi server di composer chat Control UI. Browser merekam audio mikrofon, mengirimkannya sebagai base64 ke Gateway, dan Gateway menjalankan pipeline `tools.media.audio` yang dikonfigurasi. Transkrip yang dikembalikan disisipkan ke draf; tidak ada run agen yang dimulai sampai pengguna mengirimkannya. +- `chat.inject` menambahkan catatan asisten langsung ke transkrip dan menyiarkannya ke UI (tanpa run agen). +- Run yang dibatalkan dapat tetap menampilkan output asisten parsial di UI. +- Gateway mempertahankan teks asisten parsial yang dibatalkan ke dalam riwayat transkrip saat output buffered ada, dan menandai entri tersebut dengan metadata pembatalan. - Riwayat selalu diambil dari gateway (tanpa pemantauan file lokal). -- Jika gateway tidak dapat dijangkau, WebChat bersifat hanya-baca. +- Jika gateway tidak dapat dijangkau, WebChat bersifat baca-saja. -## Panel alat agent Control UI +## Panel alat agen Control UI - Panel Tools Control UI `/agents` memiliki dua tampilan terpisah: - - **Tersedia Saat Ini** menggunakan `tools.effective(sessionKey=...)` dan menampilkan apa yang benar-benar dapat digunakan sesi saat ini pada runtime, termasuk alat milik core, plugin, dan channel. + - **Tersedia Saat Ini** menggunakan `tools.effective(sessionKey=...)` dan menampilkan apa yang benar-benar dapat digunakan sesi saat ini pada runtime, termasuk alat inti, plugin, dan milik kanal. - **Konfigurasi Alat** menggunakan `tools.catalog` dan tetap berfokus pada profil, override, dan semantik katalog. -- Ketersediaan runtime bersifat tercakup per sesi. Mengganti sesi pada agent yang sama dapat mengubah daftar +- Ketersediaan runtime bersifat tercakup per sesi. Beralih sesi pada agen yang sama dapat mengubah daftar **Tersedia Saat Ini**. -- Editor konfigurasi tidak menyiratkan ketersediaan runtime; akses efektif tetap mengikuti presedensi kebijakan - (`allow`/`deny`, override per-agent dan provider/channel). +- Editor konfigurasi tidak menyiratkan ketersediaan runtime; akses efektif tetap mengikuti prioritas kebijakan + (`allow`/`deny`, override per agen dan provider/kanal). ## Penggunaan jarak jauh -- Mode jarak jauh menyalurkan Gateway WebSocket melalui SSH/Tailscale. +- Mode jarak jauh membuat tunnel untuk gateway WebSocket melalui SSH/Tailscale. - Anda tidak perlu menjalankan server WebChat terpisah. ## Referensi konfigurasi (WebChat) @@ -71,20 +72,20 @@ Konfigurasi lengkap: [Konfigurasi](/id/gateway/configuration) Opsi WebChat: -- `gateway.webchat.chatHistoryMaxChars`: jumlah karakter maksimum untuk kolom teks dalam respons `chat.history`. Saat entri transkrip melebihi batas ini, Gateway memotong kolom teks panjang dan dapat mengganti pesan yang terlalu besar dengan placeholder. `maxChars` per-permintaan juga dapat dikirim oleh klien untuk menimpa default ini bagi satu panggilan `chat.history`. +- `gateway.webchat.chatHistoryMaxChars`: jumlah karakter maksimum untuk kolom teks dalam respons `chat.history`. Ketika entri transkrip melebihi batas ini, Gateway memotong kolom teks panjang dan dapat mengganti pesan yang terlalu besar dengan placeholder. `maxChars` per permintaan juga dapat dikirim oleh klien untuk menimpa default ini untuk satu panggilan `chat.history`. Opsi global terkait: - `gateway.port`, `gateway.bind`: host/port WebSocket. - `gateway.auth.mode`, `gateway.auth.token`, `gateway.auth.password`: - auth WebSocket shared-secret. -- `gateway.auth.allowTailscale`: tab chat browser Control UI dapat menggunakan header identitas Tailscale + autentikasi WebSocket shared-secret. +- `gateway.auth.allowTailscale`: tab chat Control UI browser dapat menggunakan header identitas Tailscale Serve saat diaktifkan. -- `gateway.auth.mode: "trusted-proxy"`: auth reverse-proxy untuk klien browser di belakang sumber proxy **non-loopback** yang sadar identitas (lihat [Auth Proxy Tepercaya](/id/gateway/trusted-proxy-auth)). +- `gateway.auth.mode: "trusted-proxy"`: autentikasi reverse-proxy untuk klien browser di belakang sumber proxy **non-loopback** yang sadar identitas (lihat [Autentikasi Proxy Tepercaya](/id/gateway/trusted-proxy-auth)). - `gateway.remote.url`, `gateway.remote.token`, `gateway.remote.password`: target gateway jarak jauh. - `session.*`: penyimpanan sesi dan default kunci utama. ## Terkait - [Control UI](/id/web/control-ui) -- [Dasbor](/id/web/dashboard) +- [Dashboard](/id/web/dashboard)