Plugins
Phân giải phụ thuộc của Plugin
OpenClaw giữ công việc xử lý phụ thuộc của Plugin ở thời điểm cài đặt/cập nhật. Việc tải lúc chạy không chạy trình quản lý gói, sửa chữa cây phụ thuộc, hay thay đổi thư mục gói OpenClaw.
Phân chia trách nhiệm
Các gói Plugin sở hữu đồ thị phụ thuộc của chúng:
- các phụ thuộc runtime nằm trong
dependencieshoặcoptionalDependenciescủa gói Plugin - các import SDK/core là peer hoặc import do OpenClaw cung cấp
- các Plugin phát triển cục bộ tự mang theo các phụ thuộc đã được cài đặt sẵn
- các Plugin npm và git được cài vào các gốc gói do OpenClaw sở hữu
OpenClaw chỉ sở hữu vòng đời Plugin:
- phát hiện nguồn Plugin
- cài đặt hoặc cập nhật gói khi được yêu cầu rõ ràng
- ghi lại siêu dữ liệu cài đặt
- tải entrypoint của Plugin
- thất bại với lỗi có thể hành động khi thiếu phụ thuộc
Gốc cài đặt
OpenClaw dùng các gốc ổn định theo từng nguồn:
- gói npm cài dưới
~/.openclaw/npm - gói git clone dưới
~/.openclaw/git - cài đặt local/path/archive được sao chép hoặc tham chiếu mà không sửa chữa phụ thuộc
Các cài đặt npm chạy trong gốc npm với:
npm install --prefix ~/.openclaw/npm <spec> --omit=dev --omit=peer --legacy-peer-deps --ignore-scripts --no-audit --no-fund
openclaw plugins install npm-pack:<path.tgz> dùng cùng gốc npm được quản lý đó
cho một tarball npm-pack cục bộ. OpenClaw đọc siêu dữ liệu npm của tarball, thêm nó
vào gốc được quản lý dưới dạng một phụ thuộc file: đã sao chép, chạy cài đặt npm thông thường,
rồi xác minh siêu dữ liệu lockfile đã cài đặt trước khi tin cậy Plugin.
Điều này dành cho bằng chứng chấp nhận gói và ứng viên phát hành, nơi một
hiện vật pack cục bộ phải hoạt động như hiện vật registry mà nó mô phỏng.
npm có thể hoist các phụ thuộc bắc cầu lên ~/.openclaw/npm/node_modules bên cạnh
gói Plugin. OpenClaw quét gốc npm được quản lý trước khi tin cậy
cài đặt và dùng npm để gỡ các gói do npm quản lý trong khi gỡ cài đặt, nên các
phụ thuộc runtime được hoist vẫn nằm trong ranh giới dọn dẹp được quản lý.
Các Plugin import openclaw/plugin-sdk/* khai báo openclaw là một peer
dependency. OpenClaw không để npm cài một bản sao registry riêng của
gói host vào gốc được quản lý, vì các gói host cũ có thể ảnh hưởng đến việc phân giải peer của npm
trong các lần cài Plugin sau. Các cài đặt npm được quản lý bỏ qua phân giải/hiện thực hóa peer của npm
cho gốc dùng chung và OpenClaw tái xác nhận các liên kết node_modules/openclaw cục bộ theo Plugin
cho các gói đã cài đặt khai báo host peer sau khi cài đặt, cập nhật, hoặc gỡ cài đặt.
Các cài đặt git clone hoặc làm mới kho lưu trữ, rồi chạy:
npm install --omit=dev --ignore-scripts --no-audit --no-fund
Plugin đã cài đặt sau đó tải từ thư mục gói đó, nên việc phân giải node_modules
cục bộ theo gói và thư mục cha hoạt động giống như với một gói
Node thông thường.
Plugin cục bộ
Plugin cục bộ được xem là các thư mục do nhà phát triển kiểm soát. OpenClaw không
chạy npm install, pnpm install, hay sửa chữa phụ thuộc cho chúng. Nếu một
Plugin cục bộ có phụ thuộc, hãy cài chúng trong Plugin đó trước khi tải nó.
Các Plugin TypeScript cục bộ của bên thứ ba có thể dùng đường dẫn Jiti khẩn cấp. Plugin JavaScript đã đóng gói và Plugin nội bộ đi kèm tải qua import/require native thay vì Jiti.
Khởi động và tải lại
Khởi động Gateway và tải lại cấu hình không bao giờ cài đặt phụ thuộc Plugin. Chúng đọc các bản ghi cài đặt Plugin, tính entrypoint, và tải nó.
Nếu thiếu phụ thuộc lúc chạy, Plugin không tải được và lỗi phải chỉ người vận hành đến một cách sửa rõ ràng:
openclaw plugins update <id>
openclaw plugins install <source>
openclaw doctor --fix
doctor --fix có thể dọn trạng thái phụ thuộc cũ do OpenClaw tạo và khôi phục
các Plugin có thể tải xuống bị thiếu khỏi bản ghi cài đặt cục bộ khi cấu hình
tham chiếu đến chúng. Doctor không sửa chữa phụ thuộc cho một Plugin cục bộ đã cài đặt.
Plugin đi kèm
Các Plugin đi kèm nhẹ và quan trọng với core được phân phối như một phần của OpenClaw. Chúng nên không có cây phụ thuộc runtime nặng hoặc được chuyển ra thành một gói có thể tải xuống trên ClawHub/npm.
Để xem danh sách hiện được tạo của các Plugin được phân phối trong gói core, cài đặt bên ngoài, hoặc chỉ giữ dưới dạng nguồn, hãy xem Kho Plugin.
Manifest của Plugin đi kèm không được yêu cầu staging phụ thuộc. Chức năng Plugin lớn hoặc tùy chọn nên được đóng gói như một Plugin thông thường và cài đặt qua cùng đường dẫn npm/git/ClawHub như Plugin bên thứ ba.
Trong checkout nguồn, OpenClaw xem kho lưu trữ là một pnpm monorepo. Sau
pnpm install, Plugin đi kèm tải từ extensions/<id> để các phụ thuộc workspace
cục bộ theo gói khả dụng và các chỉnh sửa được nhận trực tiếp. Phát triển trên
checkout nguồn chỉ hỗ trợ pnpm; npm install thuần ở gốc kho lưu trữ
không phải là cách được hỗ trợ để chuẩn bị phụ thuộc của Plugin đi kèm.
| Dạng cài đặt | Vị trí Plugin đi kèm | Chủ sở hữu phụ thuộc |
|---|---|---|
npm install -g openclaw |
Cây runtime đã build bên trong gói | Gói OpenClaw và các luồng cài đặt/cập nhật/doctor Plugin rõ ràng |
Git checkout plus pnpm install |
Các gói workspace extensions/<id> |
Workspace pnpm, bao gồm phụ thuộc riêng của từng gói Plugin |
openclaw plugins install ... |
Gốc Plugin npm/git/ClawHub được quản lý | Luồng cài đặt/cập nhật Plugin |
Dọn dẹp cũ
Các phiên bản OpenClaw cũ đã tạo các gốc phụ thuộc của Plugin đi kèm khi khởi động hoặc
trong quá trình sửa chữa bằng doctor. Dọn dẹp doctor hiện tại xóa các thư mục và
symlink lỗi thời đó khi dùng --fix, bao gồm các gốc plugin-runtime-deps cũ, symlink gói
Node-prefix toàn cục trỏ đến mục tiêu plugin-runtime-deps đã bị prune,
manifest .openclaw-runtime-deps*, node_modules Plugin được tạo,
thư mục giai đoạn cài đặt, và store pnpm cục bộ theo gói. Postinstall đã đóng gói cũng
xóa các symlink toàn cục đó trước khi prune các gốc mục tiêu cũ để các nâng cấp
không để lại import gói ESM bị treo.
Các đường dẫn này chỉ là phần còn sót cũ. Cài đặt mới không nên tạo chúng.