Pembagian tanggung jawab
Paket Plugin memiliki graph dependensinya sendiri:- dependensi runtime berada di
dependenciesatauoptionalDependenciespaket Plugin - impor SDK/core adalah peer atau impor OpenClaw yang disediakan
- Plugin pengembangan lokal membawa dependensinya sendiri yang sudah terinstal
- Plugin npm dan git diinstal ke root paket milik OpenClaw
- menemukan sumber Plugin
- menginstal atau memperbarui paket saat diminta secara eksplisit
- mencatat metadata install
- memuat entrypoint Plugin
- gagal dengan error yang dapat ditindaklanjuti saat dependensi hilang
Root install
OpenClaw menggunakan root per sumber yang stabil:- paket npm diinstal ke proyek per Plugin di bawah
~/.openclaw/npm/projects/<encoded-package> - paket git di-clone di bawah
~/.openclaw/git - install lokal/path/archive disalin atau direferensikan tanpa perbaikan dependensi
openclaw plugins install npm-pack:<path.tgz> menggunakan root proyek npm per Plugin
yang sama untuk tarball npm-pack lokal. OpenClaw membaca metadata npm tarball,
menambahkannya ke proyek terkelola sebagai dependensi file: yang disalin, menjalankan
install npm normal, lalu memverifikasi metadata lockfile yang terinstal sebelum
memercayai Plugin.
Ini ditujukan untuk bukti package-acceptance dan release-candidate saat artefak pack
lokal harus berperilaku seperti artefak registry yang disimulasikannya.
Gunakan npm-pack: saat menguji paket Plugin resmi atau eksternal sebelum
publish. Install archive atau path mentah berguna untuk debugging lokal, tetapi
tidak membuktikan jalur dependensi yang sama seperti paket npm atau ClawHub yang terinstal.
npm-pack: membuktikan bentuk install paket terkelola; itu sendiri bukan
bukti bahwa Plugin adalah konten resmi yang terhubung katalog.
Saat perilaku bergantung pada status Plugin bundled atau Plugin resmi tepercaya, sandingkan
bukti paket lokal dengan install resmi berbasis katalog atau jalur paket yang dipublikasikan
yang mencatat kepercayaan resmi. Akses helper istimewa dan penanganan scope
trusted-official harus divalidasi pada jalur install tepercaya tersebut,
bukan disimpulkan dari install tarball lokal.
Jika Plugin gagal saat runtime karena impor hilang, perbaiki manifest paket
alih-alih memperbaiki proyek terkelola secara manual. Impor runtime termasuk dalam
dependencies atau optionalDependencies paket Plugin; devDependencies tidak
diinstal untuk proyek runtime terkelola. npm install lokal di dalam
~/.openclaw/npm/projects/<encoded-package> dapat membuka blokir diagnostik sementara,
tetapi itu bukan bukti package-acceptance karena install atau update berikutnya akan
membuat ulang proyek dari metadata paket.
npm dapat meng-hoist dependensi transitif ke node_modules proyek per Plugin
di samping paket Plugin. OpenClaw memindai root proyek terkelola sebelum
memercayai install dan menghapus proyek tersebut saat uninstall, sehingga
dependensi runtime yang di-hoist tetap berada dalam batas cleanup Plugin itu.
Paket Plugin npm yang dipublikasikan dapat menyertakan npm-shrinkwrap.json. npm menggunakan
lockfile yang dapat dipublikasikan tersebut saat install, dan root proyek npm terkelola
OpenClaw mendukungnya melalui jalur install npm normal. Paket Plugin yang dapat
dipublikasikan milik OpenClaw harus menyertakan shrinkwrap lokal paket yang dihasilkan dari
graph dependensi yang dipublikasikan milik paket Plugin tersebut:
devDependencies Plugin, menerapkan kebijakan override workspace,
dan menulis extensions/<id>/npm-shrinkwrap.json untuk setiap Plugin
publishToNpm. Paket Plugin pihak ketiga juga dapat menyertakan shrinkwrap;
OpenClaw tidak mewajibkannya untuk paket komunitas, tetapi npm akan menghormatinya
saat ada.
Sebelum memperlakukan paket lokal sebagai bukti release-candidate, inspeksi tarball
yang akan diinstal:
bundledDependencies eksplisit. Jalur publish npm menimpa daftar nama dependensi
runtime, menghapus metadata workspace khusus dev dari manifest paket yang dipublikasikan,
menjalankan install npm tanpa script untuk dependensi runtime lokal paket,
lalu mengemas atau memublikasikan tarball Plugin dengan file dependensi tersebut
disertakan. Paket yang berat native, termasuk runtime Codex dan ACP, opt out
dengan openclaw.release.bundleRuntimeDependencies: false; paket tersebut tetap
mengirim shrinkwrap-nya, tetapi npm me-resolve dependensi runtime saat install
alih-alih menyematkan setiap binary platform di tarball Plugin. Paket root
openclaw tidak membundel seluruh pohon dependensinya.
Plugin yang mengimpor openclaw/plugin-sdk/* mendeklarasikan openclaw sebagai dependensi
peer. OpenClaw tidak membiarkan npm menginstal salinan registry terpisah dari
paket host ke proyek terkelola, karena paket host yang usang dapat memengaruhi resolusi
peer npm di dalam Plugin tersebut. Install npm terkelola melewati resolusi/materialisasi
peer npm dan OpenClaw menegaskan ulang tautan node_modules/openclaw lokal Plugin
untuk paket terinstal yang mendeklarasikan peer host setelah install atau update.
Install git meng-clone atau me-refresh repository, lalu menjalankan:
node_modules lokal paket dan parent bekerja sama seperti pada paket Node normal.
Plugin lokal
Plugin lokal diperlakukan sebagai direktori yang dikendalikan developer. OpenClaw tidak menjalankannpm install, pnpm install, atau perbaikan dependensi untuknya. Jika Plugin
lokal memiliki dependensi, instal dependensi tersebut di Plugin itu sebelum memuatnya.
Plugin lokal TypeScript pihak ketiga dapat menggunakan jalur darurat Jiti. Plugin
JavaScript terpaket dan Plugin internal bundled dimuat melalui native
import/require alih-alih Jiti.
Startup dan reload
Startup Gateway dan reload config tidak pernah menginstal dependensi Plugin. Keduanya membaca record install Plugin, menghitung entrypoint, dan memuatnya. Jika dependensi hilang saat runtime, Plugin gagal dimuat dan error harus mengarahkan operator ke perbaikan eksplisit:doctor --fix dapat membersihkan state dependensi lama yang dihasilkan OpenClaw dan memulihkan
Plugin yang dapat diunduh yang hilang dari record install lokal saat config
mereferensikannya. Doctor tidak memperbaiki dependensi untuk Plugin lokal yang sudah terinstal.
Plugin bundled
Plugin bundled yang ringan dan kritis untuk core dikirim sebagai bagian dari OpenClaw. Plugin tersebut sebaiknya tidak memiliki pohon dependensi runtime yang berat atau dipindahkan ke paket yang dapat diunduh di ClawHub/npm. Untuk daftar terbaru yang dihasilkan dari Plugin yang dikirim di paket core, diinstal secara eksternal, atau tetap source-only, lihat Inventaris Plugin. Manifest Plugin bundled tidak boleh meminta staging dependensi. Fungsionalitas Plugin yang besar atau opsional sebaiknya dikemas sebagai Plugin normal dan diinstal melalui jalur npm/git/ClawHub yang sama seperti Plugin pihak ketiga. Dalam checkout sumber, OpenClaw memperlakukan repository sebagai monorepo pnpm. Setelahpnpm install, Plugin bundled dimuat dari extensions/<id> sehingga dependensi workspace
lokal paket tersedia dan edit diambil secara langsung. Pengembangan checkout sumber
hanya pnpm; npm install biasa di root repository bukan cara yang didukung untuk
menyiapkan dependensi Plugin bundled.
| Bentuk install | Lokasi Plugin bundled | Pemilik dependensi |
|---|---|---|
npm install -g openclaw | Pohon runtime hasil build di paket | Paket OpenClaw dan flow install/update/doctor Plugin eksplisit |
Checkout git plus pnpm install | Paket workspace extensions/<id> | Workspace pnpm, termasuk dependensi milik setiap paket Plugin |
openclaw plugins install ... | Root proyek npm/git/ClawHub terkelola | Flow install/update Plugin |
Cleanup legacy
Versi OpenClaw lama menghasilkan root dependensi Plugin bundled saat startup atau selama perbaikan doctor. Cleanup doctor saat ini menghapus direktori dan symlink usang tersebut saat--fix digunakan, termasuk root plugin-runtime-deps lama, symlink paket
global Node-prefix yang mengarah ke target plugin-runtime-deps yang sudah dipangkas,
manifest .openclaw-runtime-deps*, node_modules Plugin yang dihasilkan, direktori
stage install, dan store pnpm lokal paket. Postinstall terpaket juga
menghapus symlink global tersebut sebelum memangkas root target legacy sehingga upgrade
tidak meninggalkan impor paket ESM yang menggantung.
Install npm lama juga menggunakan root bersama ~/.openclaw/npm/node_modules.
Flow install, update, uninstall, dan doctor saat ini masih mengenali root flat legacy tersebut
hanya untuk pemulihan dan cleanup. Install npm baru sebaiknya membuat
root proyek per Plugin sebagai gantinya.